用于提取行的各个列的优化查询是什么,该行具有特定列的最小值。
例如显示姓名和持有最低工资的所有人的工资,从下表中只有三列中的永久雇员
员工(姓名,员工类型,薪水)
EmployeeType可以是永久的或临时的 我已经知道了解决方案,但我认为可能有更好的方法 我的解决方案是:
Select E.* from Employee Where
Salary = (Select Min(Salary) From Employee Where EmployeeType='P')
and EmployeeType='P'
答案 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
参考: