2011-11-27 210 views
1

我在SQL,Employee_Details中有一个表,有三列,名称,年龄和薪水。我遇到了这个查询,从表中选择最高薪水。需要帮助了解SQL查询

SELECT * 
FROM Employee_Details e 
WHERE 0 = (
    SELECT count(DISTINCT Salary) 
    FROM Employee_Details 
    WHERE Salary > e.Salary 
) 

我不知道'0'是什么意思。任何人都可以给我一个主意。

回答

1

这只是说,从Employee_Details表内SELECT查询计数必须为0的条件(没有人能比外SELECT选择的员工更高的薪水)

做的方法这样说似乎有点奇怪给我.....我可能会使用这样的事情:

SELECT (columns) 
FROM dbo.Employee_Details e 
WHERE e.Salary = (SELECT MAX(Salary) FROM dbo.Employee_Details) 

应产生相同的结果 - 只是它似乎更清楚我很多你想要什么实现。

0

从表Employee_details获取所有地方的工资数为0

0

您的查询可以写成SELECT TOP 1 WITH TIES * FROM Employee_Details e ORDER BY Salary DESC(以T-SQL方言)。原始查询中的条件检查e中的大于Salary值的工资的不同值的数量是否为零(即,没有大于Salary的行)。

+0

我仍然无法理解它背后的逻辑。它如何检索最高薪水?请帮我理解所涉及的逻辑。 – RAHUL

+0

对于'Employee_Details'中的每一行,整个表都会被再次扫描,但是这次只会计算'Salary'高于外部行的行。如果此计数结果为零,则选择外部行。子查询将返回0,当且仅当'Employee_Details'中的行没有更高的薪水时 - 根据定义 - 这意味着最大的行。 – MagnatLU