602. 好友申请 II :谁有最多的好友
SELECT id, COUNT(*) AS num
FROM (
SELECT requester_id AS id FROM RequestAccepted
UNION ALL
SELECT accepter_id AS id FROM RequestAccepted
) AS combined
GROUP BY id
ORDER BY num DESC
LIMIT 1;
注意:这里我们应该使用 union all 而不是 union ,因为 union all 即使遇到重复的记录也都会保存下来。 拿样例举例,输出应该是: ids 1 1 2 3 2 3 3 4
-
原始数据表:
复制
下载
+--------------+-------------+------------+ | requester_id | accepter_id | accept_date| +--------------+-------------+------------+ | 1 | 2 | 2023-01-01 | | 1 | 3 | 2023-01-02 | | 2 | 3 | 2023-01-03 | +--------------+-------------+------------+
-
合并阶段(UNION ALL):
复制
下载
+----+ | id | +----+ | 1 | ← requester_id | 1 | | 2 | | 2 | ← accepter_id | 3 | | 3 | +----+
-
分组统计(GROUP BY + COUNT):
复制
下载
+----+-----+ | id | num | +----+-----+ | 1 | 2 | ← 1号用户作为请求者出现2次 | 2 | 2 | ← 2号用户作为请求者1次 + 接受者1次 | 3 | 2 | ← 3号用户作为接受者出现2次 +----+-----+
-
排序取最大值(ORDER BY + LIMIT 1):
复制
下载
+----+-----+ | id | num | +----+-----+ | 1 | 3 | ← 最终结果(假设统计后1号用户最多) +----+-----+
关键点
-
UNION ALL
合并请求者和接受者的所有 ID(包含重复) -
GROUP BY + COUNT
计算每个用户的总好友数 -
ORDER BY + LIMIT
找到唯一的最大值
607. 销售员
-
-
SELECT name FROM SalesPerson WHERE sales_id NOT IN ( SELECT DISTINCT o.sales_id FROM Orders o JOIN Company c ON o.com_id = c.com_id WHERE c.name = 'RED' )
-
子查询:
SELECT DISTINCT o.sales_id FROM Orders o JOIN Company c ON o.com_id = c.com_id WHERE c.name = 'RED'
-
通过
JOIN
连接Orders
和Company
表,筛选出公司名为“RED”的订单。 -
DISTINCT
确保每个销售人员ID只出现一次,避免重复。
-
-
主查询:
SELECT s.name FROM SalesPerson s WHERE s.sales_id NOT IN (...)
-
从
SalesPerson
表中选择不在子查询结果中的销售人员,即未参与“RED”公司订单的销售人员。
-