我在SQL,Employee_Details中有一个表,有三列,名称,年龄和薪水。我遇到了这个查询,从表中选择最高薪水。需要帮助了解SQL查询
SELECT *
FROM Employee_Details e
WHERE 0 = (
SELECT count(DISTINCT Salary)
FROM Employee_Details
WHERE Salary > e.Salary
)
我不知道'0'是什么意思。任何人都可以给我一个主意。
我在SQL,Employee_Details中有一个表,有三列,名称,年龄和薪水。我遇到了这个查询,从表中选择最高薪水。需要帮助了解SQL查询
SELECT *
FROM Employee_Details e
WHERE 0 = (
SELECT count(DISTINCT Salary)
FROM Employee_Details
WHERE Salary > e.Salary
)
我不知道'0'是什么意思。任何人都可以给我一个主意。
这只是说,从Employee_Details
表内SELECT
查询计数必须为0的条件(没有人能比外SELECT
选择的员工更高的薪水)
做的方法这样说似乎有点奇怪给我.....我可能会使用这样的事情:
SELECT (columns)
FROM dbo.Employee_Details e
WHERE e.Salary = (SELECT MAX(Salary) FROM dbo.Employee_Details)
应产生相同的结果 - 只是它似乎更清楚我很多你想要什么实现。
从表Employee_details获取所有地方的工资数为0
您的查询可以写成SELECT TOP 1 WITH TIES * FROM Employee_Details e ORDER BY Salary DESC
(以T-SQL方言)。原始查询中的条件检查e
中的大于Salary
值的工资的不同值的数量是否为零(即,没有大于Salary
的行)。
我仍然无法理解它背后的逻辑。它如何检索最高薪水?请帮我理解所涉及的逻辑。 – RAHUL
对于'Employee_Details'中的每一行,整个表都会被再次扫描,但是这次只会计算'Salary'高于外部行的行。如果此计数结果为零,则选择外部行。子查询将返回0,当且仅当'Employee_Details'中的行没有更高的薪水时 - 根据定义 - 这意味着最大的行。 – MagnatLU