我有三列:发件人,收件人,短信息#。
我需要通过获取两列的平均值来压缩行。
因此,假设Carol发送了Jack 8短信,而Jack发送了Carol 4短信,结果将是这两个人之间的6条消息。
有关更好的说明,请参见下图。
在SQL中执行此操作的典型方法如下:
select least(sender, receiver) as person1,
greatest(sender, receiver) as person2,
sum(num)
from t
group by least(sender, receiver),
greatest(sender, receiver);
有些数据库不支持least()
和greatest()
。这些可以用case
表达式代替。
select (case when sender < receiver then sender else receiver end) as person1,
(case when sender >= receiver then sender else receiver end) as person2,
sum(num)
from t
group by (case when sender < receiver then sender else receiver end),
(case when sender >= receiver then sender else receiver end);