现在最吃香的工程师是 全栈工程师 (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 Coding Exercise – Second Highest Salary
GD Star Rating
loading...
本文一共 300 个汉字, 你数一下对不对.loading...
上一篇: 从互联网广告(Adsense)来谈谈 影响 SteemIt 的收入因素
下一篇: 如果大家要是一直生一直生直到生到女儿, 岂不是男女比例失调啊?
扫描二维码,分享本文到微信朋友圈
题目不好.并列第一的时候有没有第二?
题目意思是 取第二高的数值