SQL 常用查询模板
分组统计、排名、去重取最新一条的写法。
模板正文
-- 分组统计(按天、按渠道) SELECT DATE(created_at) AS d, channel, COUNT(*) AS cnt, SUM(amount) AS total FROM orders WHERE created_at >= '2026-10-01' GROUP BY d, channel ORDER BY d DESC, total DESC; -- 取每个用户最新一条记录(窗口函数) SELECT * FROM ( SELECT *, ROW_NUMBER() OVER (PARTITION BY user_id ORDER BY created_at DESC) AS rn FROM events ) t WHERE rn = 1; -- 分组后取前 3 名 SELECT * FROM ( SELECT *, RANK() OVER (PARTITION BY dept ORDER BY salary DESC) AS rk FROM employees ) t WHERE rk <= 3; -- 找重复数据 SELECT email, COUNT(*) c FROM users GROUP BY email HAVING c > 1;
怎么用
写报表 SQL 时改表名和字段名即可。
使用要点
- WHERE 在分组前过滤,HAVING 在分组后过滤,条件放错位置结果会不同。
- 大表查询先看有没有走索引,EXPLAIN 一下再执行。