作者
AlexeiLedenev
翻译
天道酬勤,责编
Carol
在任何以数据为中心的工作中,对SQL有深刻的理解都是成功的关键,尽管这不是工作中最有趣的部分。事实上,除了SELECTFROMWHEREGROUPBYORDERBY之外,还有更多的SQL方法。你知道的功能越多,操作和查询所需的内容就越容易。
作者希望在本文中学习和交流以下两件事:
1)学习和教一些基本功能以外的SQL函数;
2)探讨一些SQL面试练习问题。
*本文中的问题仅来自Leetcode
问题1:第二高的薪水
编写一个SQL查询用于从Employee表中获取第二高的薪水。例如,给定下面的Employee表,查询应返回作为第二高的薪水。如果没有第二高的薪水,则查询应返回null。
+----+--------+
Id
Salary
+----+--------+
1
2
3
+----+--------+
1)解决方案A:使用IFNULL,OFFSET
IFNULL(表达,alt):如果为null,则ifnull()返回指定的值,否则返回期望的值。如果没有第二高的薪水,我们会使用它返回null。OFFSET:offset与ORDERBY子句一起使用可忽略指定的前n行。这会很有用,因为你希望获得第二行(第二高的薪水)
Id
Salary
+----+--------+
1
2
3
+----+--------+
2)解决方案B:使用MAX()
此查询表示选择的MAX薪水不等于最高薪水,这等于选择第二高的薪水。
SELECTIFNULL((SELECTDISTINCTSalaryFROMEmployeeORDERBYSalaryDESCLIMIT1OFFSET1),null)asSecondHighestSalaryFROMEmployeeLIMIT1
问题2:重复的电子邮件
编写SQL查询以在名为Person的表中查找所有重复的电子邮件。
+----+---------+
Id
+----+---------+
1
a
b.