SQL查询:在表中获取具有最小值的整行

时间:2011-07-20 02:50:49

标签: sql tsql

用于提取行的各个列的优化查询是什么,该行具有特定列的最小值。

例如显示姓名和持有最低工资的所有人的工资,从下表中只有三列中的永久雇员

  

员工(姓名,员工类型,薪水)

EmployeeType可以是永久的或临时的 我已经知道了解决方案,但我认为可能有更好的方法 我的解决方案是:

Select E.*  from Employee Where 
Salary = (Select Min(Salary) From Employee Where EmployeeType='P') 
and EmployeeType='P'

2 个答案:

答案 0 :(得分:5)

SELECT TOP 1 *
FROM Employee
WHERE EmployeeType = 'P'
ORDER BY Salary ASC

在MySQL中,您可以使用LIMIT 1。在Oracle中,您可以使用内部查询与WITH rownum = 1结合使用。

即使有几名员工分享最低工资,这也总会返回一行。如果要指定要返回哪些行,可以添加其他排序列。

如果你想要返回所有这些行,OP的查询将是最优的:

SELECT *
FROM Employee
WHERE Salary = (
    SELECT MIN(Salary)
    FROM Empoyee
    WHERE EmployeeType = 'P'
)
AND EmployeeType = 'P'

答案 1 :(得分:1)

如果最低工资由多个员工共享,您可以使用TOP (1) WITH TIES构造检索所有这些:

SELECT TOP (1) WITH TIES *
FROM Employee
WHERE EmployeeType = 'P'
ORDER BY Salary

参考: