mysql - SQL - 从不同的对计数
问题描述
我有一张表,表示在 FB 上的朋友之间发送消息:
Sender Receiver Msgs #
Dave John 6
John Dave 1
Sam Dave 2
Mark Ash 1
Ash Dave 3
Mark Steve 8
什么是 SQL 查询来显示有多少人有 1,2,3... 朋友:
Num of friends Quantity
1 3
2 2
3 1
我尝试过使用循环,但它变得太复杂了......
解决方案
您可以通过以下方法使用几个子查询来实现此目的:
- 所有唯一发送者和接收者的列表。
- 每个唯一发件人的朋友数计数。
- 将朋友的数量分组并计算出现的次数。
这是一些显示它工作的代码(显然字段名称需要更改以匹配您的实际表):
CREATE TABLE msgs (Sender VARCHAR(20), Receiver VARCHAR(20), Msgs INT);
INSERT INTO msgs VALUES ('Dave', 'John', 6), ('John', 'Dave', 1),('Sam', 'Dave', 2),('Mark', 'Ash', 1), ('Ash', 'Dave', 3),('Mark', 'Steve', 8);
SELECT FriendCount AS `Num of friends`,
COUNT(*) AS Quantity
FROM (
SELECT Sender,
COUNT(*) AS FriendCount
FROM (
SELECT DISTINCT
Sender,
Receiver
FROM msgs
UNION
SELECT DISTINCT
Receiver,
Sender
FROM msgs
) a
GROUP BY Sender
) a
GROUP BY FriendCount
ORDER BY FriendCount;
DROP TABLE msgs;
输出:
Num of friends Quantity
1 3
2 2
3 1
推荐阅读
- javascript - 如何同时收听单击和双击右键
- c++ - 初始化 Pair 的向量
带有 emplace_back - python - 模拟股市收益的随机数
- ios - iPhone Cordova 应用程序不断闪烁白色
- bookdown - 单个页面上没有引用...?
- reactjs - 加载资源:上传 React/Node/Express 后的 net::ERR_CONNECTION_REFUSED
- python - ValueError:传递值的形状为 (12, 8),索引暗示 (12, 12) 和 .describe()
- python - 使用 python 运行指令时出错
- html - div 的 vw 宽度集,但由于某种原因,它们不对齐
- flutter - Android Studio 中的 Flutter 和 Dark SDK 路径没有改变