免费教程《图解 SQL 面试题》
  • 图解 SQL 面试题
  • 第 1 章:简单查询
  • 图解面试题:如何查找重复数据?
  • 第 2 章:复杂查询
    • 图解面试题:如何查找第 N 高的数据?
  • 第 3 章 多表查询?
    • 图解面试题:多表如何查询?
    • 图解面试题:如何查找不在表里的数据?
    • 图解面试题:你有多久没涨过工资了?
    • 图解面试题:如何比较日期数据?
    • 图解面试题:如何交换数据?
    • 滴滴 2020 年面试题:如何找出最小的 N 个数?
    • 图解面试题:行列互换问题,怎么办?
    • 图解面试题:找出连续出现 N 次的内容?
    • 链家面试题:如何分析留存率?
  • 第 4 章
    • 拼多多面试题:如何查找前 20% 的数据?
    • 图解面试题:如何查找工资前三高的员工
    • 图解面试题:如何分组比较?
    • 图解面试题:双 11 用户如何分析?
    • 图解面试题:如何分析游戏?
  • 第 5 章:项目实战
    • 图解面试题:滴滴 2020 求职真题
    • 滴滴面试题:打车业务问题如何分析?
    • 电商面试题:如何分析复杂业务?
    • 图解面试题:如何分析用户满意度?
    • 图解面试题:如何分析红包领取情况?
    • 图解面试题:如何分析中位数?
    • 小红书面试题:如何分析用户行为?
    • 教育行业案例:学员续费如何分析?
    • 字节跳动面试题:你的平均薪水是多少?
Powered by GitBook
On this page

Was this helpful?

  1. 第 3 章 多表查询?

图解面试题:找出连续出现 N 次的内容?

Previous图解面试题:行列互换问题,怎么办?Next链家面试题:如何分析留存率?

Last updated 4 years ago

Was this helpful?

【题目】

下面是学生的成绩表(表名 score,列名:学号、成绩),使用 SQL 查找所有至少连续出现 3 次的成绩。

例如,“成绩” 这一列里 84 是连续出现 3 次的成绩。

【解题思路】

1.条件 1:什么是连续出现 3 次?

假设 “学号” 是按顺序排列的(如果不是,可以增加一列,这一列是按序号顺序排列的),所以每一学号与上一学号相差 1。例如下图的 3 个学号是连续学号,他们之间的关系是:

某一学号(0002)= 下一位的学号(0003)-1

下一位学号(0003)= 下下位学号(0004)-1

2.条件 2:成绩相等

如果这 3 个连续学号的成绩相等,就是题目要求的 “至少连续出现 3 次的成绩”。

3.利用 “自关联 “的思路

自连接(自身连接)的本质是把一张表复制出多张一模一样的表来使用。SQL 语法:

select 列名
from 表名 as 别名1,表名 as 别名2;

步骤 1)将成绩表(score)复制 3 个一样的表,分别命名为 a、b、c

select *
from score as a,
   score as b,
   score as c;

步骤 2)我们需要找到这 3 个表中 3 个连续的学号,这个条件如下

a. 学号 = b. 学号 - 1 and b. 学号 = c. 学号 - 1

步骤 3)还要让这 3 个学号连续的人 “成绩相等”,这个条件如下

a. 成绩 = b. 成绩 and b. 成绩 = c. 成绩

将步骤 2 和步骤 3 的条件合并起来就是下面 SQL 里的 where 字句:

select *
from score as a,
   score as b,
   score as c;
 where a.学号 = b.学号 - 1
   and b.学号 = c.学号 - 1
   and a.成绩 = b.成绩
   and b.成绩 = c.成绩;

步骤 4)前面步骤已经将连续 3 人相等的成绩找出,现在用 distinct 去掉自连接产生的重复数。最终 SQL 如下:

select distinct a.成绩 as 最终答案
from score as a,
   score as b,
   score as c;
 where a.学号 = b.学号 - 1
   and b.学号 = c.学号 - 1
   and a.成绩 = b.成绩
   and b.成绩 = c.成绩;

最终结果:

【本题考点】

• 本题考察的是连续出现,会有同学忽略 “连续” 二字

• 考察对自关联的灵活应用

• 从题目连续 3 次成绩相等,判断出 “成绩相等” 和“学号连续”这 2 个条件。考察构建 “连续学号成绩相等” 的思维构建能力

【举一反三】

遇到类似 “连续出 N 次的问题” 可以回想本题的解答思路,如:查询至少连续 3 天没有出勤的员工。

推荐:

如何提升你的分析技能,实现升职加薪?