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

Kun*_*pal 1 sql t-sql

什么是优化查询,用于提取一行的各列,这些列具有特定列的最小值.

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

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

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

Select E.*  from Employee Where 
Salary = (Select Min(Salary) From Employee Where EmployeeType='P') 
and EmployeeType='P'
Run Code Online (Sandbox Code Playgroud)

Mar*_*rot 5

SELECT TOP 1 *
FROM Employee
WHERE EmployeeType = 'P'
ORDER BY Salary ASC
Run Code Online (Sandbox Code Playgroud)

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

这将始终返回一行,即使有几个员工分享最低工资.如果要指定要返回哪些行,可以添加其他排序列.

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

SELECT *
FROM Employee
WHERE Salary = (
    SELECT MIN(Salary)
    FROM Empoyee
    WHERE EmployeeType = 'P'
)
AND EmployeeType = 'P'
Run Code Online (Sandbox Code Playgroud)