经常有小伙给我留言说在找工作,面试中遇到SQL相关问题,如何解决?
今天,我将自己多年总结出来的解答SQL面试的方法告诉你,它就是:5步法SQL解题步骤。
为了帮助你更好的理解“5步法SQL解题步骤”,我通过一个案例来说明白。
【案例】用5步法解题:房源评分统计
表1 所示为各城市房源的评分表,表名为“评分表”,含有3个字段:房源号、城市、分数。求分数(满分10 分)在0~5 分、5~7 分、7~9 分、9 分及以上的分别有多少个房源?
表1 评分表
【解题思路】
1. 读懂问题,画出查询结果表
这道面试题是想找出不同分数段的房源有多少,那么我们可以想象着画出SQL 查询结果表,如表2 所示。
表2 查询结果表
2. 拆解问题
为了得到最终的查询结果表,我们可以将问题拆解为下面几个部分。
(1)将“评分表”按照0-5 分、5-7 分、7-9 分、9 分及以上4 个区间进行分组。
(2)对每个区间的房源进行计数。
3. 找出考点
通过问题拆解,可以发现这个题目是“分区间问题”,考查的SQL 知识是“复杂查询”里多条件判断的case 表达式。
4. 分步实现
(1)将“评分表”按照0-5 分、5-7 分、7-9 分、9 分及以上这4 个区间进行分组。“分区间问题”的本质是多条件判断,要想到用SQL 里的case 表达式知识来实现。
case 表达式的用法如下。
(case when 字段1 > 值1 then 新值1
when 字段1 < 值1 then 新值2
else 新值3 (可省略)
end) as 别名
翻译过来就是当字段1 >值1时,取新值1 ;当字段1 <值1时,取新值2;当字段1 =值1时,取新值3。
对应这个面试题,代码如下:
(case when 分数<5 then 房源号 end) as '0-5',
(case when 分数>=5 and 分数<7 then 房源号 end) as '5-7',
(case when 分数>=7 and 分数<9 then 房源号 end) as '7-9',
(case when 分数>=9 then 房源号 end) as '9+'
(2)对每个区间的房源进行计数。
在第(1)步的SQL 语句中,每个case 表达式前面加上计数函数count(),用于统计每个区间的房源数量。例如,区间0-5 的房源数的代码如下:
count(case when 分数<5 then 房源号 end) as '0-5',
对应的逻辑关系如图1 所示。
图1 对应关系
5. 组合实现
把前面两个步骤的SQL 语句组合在一起,就是完整代码,如下所示:
select
count(case when 分数<5 then 房源号 end) as '0-5',
count(case when 分数>=5 and 分数<7 then 房源号 end) as '5-7',
count(case when 分数>=7 and 分数<9 then 房源号 end) as '7-9',
count(case when 分数>=9 then 房源号 end) '9+'
from 评分表;
查询结果如表3 所示,将其填充至题目所要求的“查询结果表”中即可。
表3 查询结果表
这样你就通过SQL 解题的5 个步骤得出了面试题答案。以上就是针对一个真实面试题的全部解题步骤。
在面试中,拿到任何题目都不要慌张,先思考最终结果是怎样一个展现,然后根据最终结果一步步拆解找出对应的知识点,分步实现,最终整合完成。同样,这个解题步骤也适应于解决工作里的实际业务问题。