阅界食谱今天吃什么,先来这里看看
代码片段

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 一下再执行。

同类模板

SQL 常用查询模板 · 阅界食谱