如果一个行中某一列的值是最小的,那么这个优化后的查询是什么呢?
用于如下表
显示永久雇员类别中持有最低工资的所有人员的姓名和工资Employee (Name, EmployeeType, Salary)
EmployeeType可以是Permanent或Temporary
我已经知道一个解决方案,但我认为可能有更好的方法。我的解决方案是:
Select E.* from Employee Where
Salary = (Select Min(Salary) From Employee Where EmployeeType='P')
and EmployeeType='P'
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'
如果最低工资由多个员工共享,您可以使用TOP (1) WITH TIES
结构检索所有员工:
SELECT TOP (1) WITH TIES *
FROM Employee
WHERE EmployeeType = 'P'
ORDER BY Salary
参考:- 顶部(transact - sql)