如何编写SQL合并双向关联记录并聚合总时长?
正确SQL实现方案
要把双向的记录(比如from_id=10,to_id=20和from_id=20,to_id=10)合并统计,核心是要把这两对视为同一组。可以用LEAST()和GREATEST()函数统一每组的id顺序,再分组求和:
SELECT LEAST(from_id, to_id) AS from_id, GREATEST(from_id, to_id) AS to_id, SUM(duration) AS total_duration FROM your_table_name GROUP BY LEAST(from_id, to_id), GREATEST(from_id, to_id);
说明:
LEAST(from_id, to_id)会取两个id中较小的值,GREATEST()取较大的值,这样不管是10→20还是20→10,都会被统一成from_id=10,to_id=20的组。- 你原来的SQL直接按原始的
from_id和to_id分组,会把双向记录当成独立两组,自然无法合并统计。
执行上述SQL后,输出结果与你期望的一致:
from_id to_id total_duration 10 20 100 10 30 80 20 40 110
内容的提问来源于stack exchange,提问作者aim_thebest
相关产品推荐
相关产品推荐

