提问人:ANIRUDH JAKHAR 提问时间:11/11/2023 最后编辑:Adrian MaxwellANIRUDH JAKHAR 更新时间:11/11/2023 访问量:51
如何在 SQL 中按多个列中的值进行分组?
How do I group by values in multiple columns in SQL?
问:
想象一下一张看起来像
| | | |,说表名是现在我要写一个SQL查询,给我:,。所以基本上如果 id = 12 发送了 3 条消息并收到了 5 条消息,结果将是:12,8sender_ID
Receiver_ID
message_ID
**tb**
user_id
Total messages exchanged by that user
我不确定是否
Select COUNT(MESSAGE_ID)
from tb
group by sender_id, reciever_id
但这显然是错误的
答:
0赞
Barmar
11/11/2023
#1
用于在一列中合成所有发送方和接收方的表。然后,您可以将其加入以计算两个ID。UNION
tb
WITH users AS (
SELECT sender_id AS id
FROM tb
UNION DISTINCT
SELECT receiver_id AS id
FROM tb
)
SELECT u.id, COUNT(*) AS message_count
FROM users u
JOIN tb ON u.id IN (tb.sender_id, tb.receiver_id)
GROUP BY u.id
0赞
Isolated
11/11/2023
#2
此版本也使用 CTE 创建单列users_ids,只有两个表扫描。
with cte as (
select sender_id as user_id, message_id
from tb
union
select receiver_id, message_id
from tb
)
select user_id, count(message_id) as messages
from cte
group by user_id
order by user_id;
user_id | 消息 |
---|---|
3601 | 4 |
4500 | 3 |
8752 | 1 |
下一个:按每个日期的最后注册进行分组
评论
user_id