订阅更新

手写 SQL 必刷

先补几个最容易写错的语义(NULL、LEFT JOIN、窗口边界),再刷业务场景题和 LeetCode 精选,最后是大数据量下的写法。

1 周37 题适合:笔试或面试要现场写 SQL 还没开始

从第 1 题开始 随机抽一题自测

1容易写错的语义

9 题

这些是「写出来能跑但结果错」的坑,面试官最爱考。

  1. 077 SQL 的逻辑执行顺序是什么? SQL 与数据库
  2. 068 SQL LEFT JOIN 条件放在 ON 和 WHERE 有什么区别? SQL 与数据库
  3. 073 SQL WHERE 和 HAVING 有什么区别? SQL 与数据库
  4. 113 SQL 中 NOT IN 遇到 NULL,为什么结果可能为空? SQL 与数据库
  5. 057 SQL COUNT(*)、COUNT(1) 和 COUNT(列) 有什么区别? SQL 与数据库
  6. 067 SQL UNION 和 UNION ALL 有什么区别? SQL 与数据库
  7. 062 SQL ROW_NUMBER、RANK 和 DENSE_RANK 有什么区别? SQL 与数据库
  8. 052 SQL 窗口函数 ROWS 和 RANGE 有什么区别? SQL 与数据库
  9. 069 SQL GROUP BY 和窗口函数有什么区别? SQL 与数据库

2业务场景题

12 题

每题先自己写,再看讲解;连续、留存、漏斗是三大高频。

  1. 114 SQL 如何计算用户连续登录天数? SQL 与数据库
  2. 115 SQL 如何实现每个分组的 Top N? SQL 与数据库
  3. 133 SQL 如何计算次日、7日和30日留存率? SQL 与数据库
  4. 134 SQL 如何计算漏斗转化率? SQL 与数据库
  5. 135 SQL 如何计算中位数和分位数? SQL 与数据库
  6. 143 SQL 如何计算滚动7日活跃用户和移动平均? SQL 与数据库
  7. 153 SQL 如何合并连续日期和连续区间? SQL 与数据库
  8. 076 SQL LAG 和 LEAD 怎么做环比、同比? SQL 与数据库
  9. 241 SQL 如何把用户行为切成会话?30 分钟规则有哪些边界? SQL 与数据库
  10. 262 SQL 怎么计算同时在线人数峰值?开始和结束同一时刻怎么算? SQL 与数据库
  11. 281 SQL 怎么统计新增、回流和流失用户?只看当天活跃够吗? SQL 与数据库
  12. 333 SQL 怎么计算每日累计UV?为什么不能把每日UV累加? SQL 与数据库

3LeetCode 精选

10 题

每题都有边界条件,讲解里的「易错点」要看。

  1. 2 第二高的薪水:没有第二名时怎么返回 NULL SQL 实战 123 题
  2. 4 分数排名:并列之后名次要连续 SQL 实战 123 题
  3. 5 连续出现三次的数字:LEAD 看后面两行 SQL 实战 123 题
  4. 9 每个部门工资最高的员工:并列第一都要 SQL 实战 123 题
  5. 10 部门工资前三高:前三「档」而不是前三个人 SQL 实战 123 题
  6. 12 比昨天温度高的日期:相邻日期要真的相差一天 SQL 实战 123 题
  7. 17 首日次日留存率:AVG 一个布尔值 SQL 实战 123 题
  8. 18 每个公司的薪水中位数:奇偶数一个公式搞定 SQL 实战 123 题
  9. 24 员工近三个月累计薪水:ROWS 和 RANGE 的区别 SQL 实战 123 题
  10. 32 体育馆人流高峰:连续三天以上人数不少于 100 SQL 实战 123 题

4大数据量下怎么写

6 题

能把 SQL 写对之后,再讲为什么慢、怎么改。

  1. 116 COUNT(DISTINCT) 数据量很大时怎么优化? SQL 与数据库
  2. 144 SQL 执行计划怎么看?如何定位慢查询? SQL 与数据库
  3. 202 SQL 分区裁剪为什么会失效? SQL 与数据库
  4. 037 SQL Join 后数据量翻倍,你怎么排查? SQL 与数据库
  5. 16-02 GROUP BY做统计,一个Task卡死跑不完——COUNT(DISTINCT)为什么特别容易倾斜? SQL 与数据库
  6. 16-03 两张大表JOIN,某个key有500万条——JOIN倾斜的三种解法怎么选? SQL 与数据库

其他路线:面试前 3 天冲刺离线数仓开发实时计算开发湖仓与 OLAPAI / 大模型数据岗数据治理与平台项目表达与行为面