提取一行中包含特定列的最小值的各种列的优化查询是什么?
例如,在下表中显示在长期雇员类别中持有最低工资的所有人员的姓名和薪资,该表中只有三列。
员工(姓名、EmployeeType、薪资)
EmployeeType可以是永久的,也可以是暂时的
我已经知道了一个解决办法,但我认为可能有更好的办法。
我的解决办法是:
Select E.* from Employee Where
Salary = (Select Min(Salary) From Employee Where EmployeeType='P')
and EmployeeType='P'发布于 2011-07-20 05:43:55
如果多个员工共享最低工资,则可以使用TOP (1) WITH TIES结构检索所有薪资:
SELECT TOP (1) WITH TIES *
FROM Employee
WHERE EmployeeType = 'P'
ORDER BY Salary参考资料:
发布于 2011-07-20 03:13:22
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'https://stackoverflow.com/questions/6756466
复制相似问题