You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL SELECT查询如何去除uid与cid双向配对的重复统计结果

双向存储用户接触时长去重统计方案

核心思路

  • 统一成对用户的排序规则:无论原始记录中两个用户的id谁在前谁在后,都固定按id大小排序,让A&B、B&A两类对称记录归属到同一分组
  • 因为每一次接触行为都会生成两条对称的存储记录,统计实际总时长时需要对求和结果做除2处理

兼容大部分数据库的实现SQL

SELECT
  CASE WHEN uid < cid THEN uid ELSE cid END AS uid,
  CASE WHEN uid > cid THEN uid ELSE cid END AS cid,
  SUM(dura) / 2 AS total
FROM tracing
GROUP BY
  CASE WHEN uid < cid THEN uid ELSE cid END,
  CASE WHEN uid > cid THEN uid ELSE cid END
ORDER BY total DESC;

简化写法(支持LEAST/GREATEST函数的数据库如MySQL、PostgreSQL可直接使用)

SELECT
  LEAST(uid, cid) AS uid,
  GREATEST(uid, cid) AS cid,
  SUM(dura) / 2 AS total
FROM tracing
GROUP BY LEAST(uid, cid), GREATEST(uid, cid)
ORDER BY total DESC;

结果说明

针对你提供的示例数据执行以上语句,输出结果完全符合预期:

uidcidtotal
AB6
BC2

如果需要输出带min单位的结果,可将统计字段修改为CONCAT(SUM(dura)/2, 'min') AS total即可。

内容的提问来源于stack exchange,提问作者Tiket gcp

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.14 08:15:05