软件工程师数据库面试技巧之 SQL中的第二名记录


现在最吃香的工程师是 全栈工程师 (Full Stack), 因此你除了要好的算法数据结构知识外 你还需要懂数据库等计算机知识. 有人说, SQL好简单, 其实SQL也可以考考你的逻辑, 比如有这么一个简单的 (含有两个字段, 三行记录) 的关系表 (假设表名为 Employee).

 +----+--------+
| Id | Salary |
+----+--------+
| 1  | 100    |
| 2  | 200    |
| 3  | 300    |
+----+--------+

请输出第二高的记录, 也就是 ID = 2, Salary = 200.

如果不存在第二高, 比如 两条记录都是 100, 100, 那么应该返回 null. 而 100, 100, 90 应该返回90而不是100. 这样的话:

1
select * from Employee order by salary desc limit 1,1
select * from Employee order by salary desc limit 1,1

就不对了. 你也可以用 group by:

1
select Salary as SecondHighestSalary from Employee group by Salary order by Salary limit 1,1 
select Salary as SecondHighestSalary from Employee group by Salary order by Salary limit 1,1 

但是当第二高记录不存在时, 该SQL返回空而不是 null.

Input: {"headers": {"Employee": ["Id", "Salary"]}, "rows": {"Employee": [[1, 100]]}}
Output: {"headers": ["SecondHighestSalary"], "values": []}
Expected: {"headers": ["SecondHighestSalary"], "values": [[null]]}

SQL中有 max, min, 但这些都无法直接输出第二高(或者第二低), 但你可以这么想, 我取得了最高的, 剩下的取最高就是第二高了, 是不是很简单?

Select max(Salary)
from Employee
where Salary < (select max(Salary) from Employee)

上面黑体的是子查询 先返回最大的记录为 300, 那么接下来意思就很明白了, 比最大值300小的最大值是多少? 200嘛.

PS: 当年我招程序员的面试的时候 就拿了这一题作为第一题 (45分钟考卷, 10题左右, 这题是送分题)

sql 软件工程师数据库面试技巧之 SQL中的第二名记录 I.T. 学习笔记 小技巧 面试

SQL programming

英文: SQL Coding Exercise – Second Highest Salary

GD Star Rating
loading...
本文一共 300 个汉字, 你数一下对不对.
软件工程师数据库面试技巧之 SQL中的第二名记录. (AMP 移动加速版本)
上一篇: 从互联网广告(Adsense)来谈谈 影响 SteemIt 的收入因素
下一篇: 如果大家要是一直生一直生直到生到女儿, 岂不是男女比例失调啊?

扫描二维码,分享本文到微信朋友圈
5026?noamp=mobile 软件工程师数据库面试技巧之 SQL中的第二名记录 I.T. 学习笔记 小技巧 面试

2 条评论

评论