博客

系列

HackerRank 上的 SQL

11 篇文章MySQLHackerRankSQL Server更新于 2026年10月6日

用真实数据表求解并讲解 HackerRank 的 SQL 练习,每个查询都配有图示,展示每个子句放行了哪些行。 从SELECT 与 WHERE到Project Planning:窗口函数与 CTE。

文章

  1. SELECT 与 WHERE从 CITY 表开始的入门查询:选择列、用 WHERE 过滤并串联条件,以及用 COUNT、SUM 和 AVG 做最初的聚合。
  2. CITY 与 COUNTRY 的 JOIN按键连接两张表:CITY 与 COUNTRY 之间的 INNER JOIN,配有交互式图示,看哪些行保留下来、哪些行被丢掉。
  3. STATION:名称与模式(一)STATION 表的第一批练习:DISTINCT、计数,以及用 SUBSTRING、LEFT 和 RIGHT 按城市名开头或结尾的元音进行过滤。
  4. STATION:名称与模式(二)STATION 的第二轮练习:用 NOT IN 取反,组合每个名称首字母和尾字母的条件,然后对 LAT_N 求和、截断并求最大值和最小值。
  5. STATION:几何与中位数STATION 的最后三道题,查询不再是过滤而变成了数学:曼哈顿距离、欧几里得距离和中位数。
  6. STUDENTS 与 EMPLOYEE复合排序、用 CASE 做聚合以及工资计算:关于 STUDENTS、GRADES 和 EMPLOYEE 表的练习。
  7. 三角形与质数图案类练习:在 SQL Server 中用循环画三角形、在一行内列出质数——这时 SQL 几乎被当成命令式语言来用——以及用 CASE WHEN 给三角形分类。
  8. OCCUPATIONS:格式化与透视塑造结果:用 CONCAT、LEFT 和 LOWER 拼接字符串,并用 ROW_NUMBER 和 CASE WHEN 把表透视成四列,因为 MySQL 没有 PIVOT。
  9. 层级:二叉树与组织结构图当一行依赖另一行时:通过表的自连接给二叉树的节点分类,并在不重复记录的情况下统计组织结构图的五个层级。
  10. 子查询与 HAVING按分组之后才知道的东西过滤:计数上的最大值、只出现一次的值、用窗口函数对每组最大值求和,以及将每一行与其所在组比较的相关子查询。
  11. Project Planning:窗口函数与 CTE把连续的任务归并成项目:用 LAG 查看上一个日期,用 SUM OVER 做累计求和为每个项目编号,再用 CTE 分组并按持续时间排序。

博客里的更多内容