我编写了以下sql命令,用于从名为 Employee
.
我能够得到最高/最高的薪水以及第二高/最高的薪水,但是当需要返回整个记录时,我很难写出同样的内容。
选择所有员工。
SELECT * FROM Employee
返回最高工资。这将返回最高工资金额90000
SELECT MAX(salary) FROM Employee
返回薪资最高的员工记录。这将返回该人员的所有记录,其工资为最高工资90000,在本例中仅为john henry。
SELECT *
FROM Employee
WHERE salary = ( SELECT MAX(salary) FROM Employee )
归还所有其他员工的记录;i、 e.除了薪水最高的人以外的所有人。
SELECT *
FROM Employee
WHERE salary != ( SELECT MAX(salary) FROM Employee )
返回第二高薪。这将返回第二个最高工资金额85000
SELECT MAX(salary) FROM Employee
WHERE salary != ( SELECT MAX(salary) FROM Employee )
返回工资第二高的员工记录。这将返回该人员的所有记录,他们的工资是第二个最高工资,即85000美元,在本例中仅为michael greenback。
我被困在这个。。。我试过用 HAVING
作为一个额外的条件,但是不管我如何安排它来指定一个条件,我都会得到语法错误。我该怎么做?
2条答案
按热度按时间toe950271#
窗口函数是实现这一点的内置功能。特别地,
dense_rank()
:kuarbcqp2#
这是一个sql server解决方案,但可以使用
limit N
而不是top N
. 如果你的数据库不支持window functions
,你可以试试这个。如果是这样的话,戈登的解决方案就是出路。