常用查询模式
掌握 TOP N、分页、行转列、去重统计等常用模式
常用查询模式
有些查询需求反复出现——排行、分页、行转列、去重统计。掌握这些"模板查询"让你写 SQL 更快。
学完本章你将: 掌握 TOP N、分页、行转列、差集/交集。
TOP N —— 查前几名
sql
-- 年龄最大的 5 个人
SELECT * FROM users ORDER BY age DESC LIMIT 5;
-- 每个城市年龄最大的 1 个人(窗口函数)
SELECT name, city, age FROM (
SELECT *, ROW_NUMBER() OVER (PARTITION BY city ORDER BY age DESC) AS rn
FROM users
) WHERE rn = 1;
行转列 —— CASE WHEN 聚合
sql
-- 每个城市各年龄段人数(行变列)
SELECT city,
COUNT(CASE WHEN age < 18 THEN 1 END) AS 未成年,
COUNT(CASE WHEN age BETWEEN 18 AND 60 THEN 1 END) AS 成人,
COUNT(CASE WHEN age > 60 THEN 1 END) AS 老年
FROM users
GROUP BY city;
查差集 —— NOT EXISTS
sql
-- 查没有订单的用户
SELECT * FROM users u
WHERE NOT EXISTS (
SELECT 1 FROM orders o WHERE o.user_id = u.id
);
-- 也可以用 LEFT JOIN + IS NULL
SELECT u.* FROM users u
LEFT JOIN orders o ON u.id = o.user_id
WHERE o.id IS NULL;
累计值 —— 窗口函数
sql
-- 每日注册人数的累计值
SELECT date, daily_count,
SUM(daily_count) OVER (ORDER BY date) AS 累计
FROM daily_stats;