如何在SQL中按多列分组?并统计用户消息交互总数量
消息交互总数统计的SQL查询方案
现有表tb,包含sender_ID、Receiver_ID、message_ID字段,需求是统计每个用户的消息交互总数量(发送消息数与接收消息数之和)。
你之前写的语句存在问题:
Select COUNT(MESSAGE_ID) from tb group by sender_id, reciever_id
按sender_id和receiver_id分组会把每一对发送者-接收者的组合单独统计,根本拿不到单个用户的总交互数。
正确的查询语句如下:
SELECT user_id, COUNT(message_id) AS total_interactions FROM ( -- 取出所有发送消息的用户记录 SELECT sender_ID AS user_id, message_id FROM tb UNION ALL -- 取出所有接收消息的用户记录 SELECT Receiver_ID AS user_id, message_id FROM tb ) AS user_messages GROUP BY user_id
逻辑说明
- 用
UNION ALL把发送者和接收者的记录合并,每条消息会对应两条记录(一条归属发送用户,一条归属接收用户) - 最后按
user_id分组统计message_id的数量,得到的就是该用户发送与接收消息的总数
内容的提问来源于stack exchange,提问作者ANIRUDH JAKHAR
相关产品推荐
相关产品推荐

