2017-01-03 77 views
-3

這條where子句是如何工作的?你能讓我明白這個查詢的工作原理嗎?

SELECT ENAME,SAL 
FROM EMP E 
WHERE 3 > (
    SELECT COUNT(*) 
    FROM EMP 
    WHERE SAL > E.SAL 
); 
+1

你真的應該增加樣本數據,除非您使用的是Oracle的樣表,即使在這種情況下,你可能想要縮小一點。 –

+0

可能不是獲取該答案的最有效的查詢。 – jarlh

回答

0

該查詢將返回嚴格少於3位其他高薪僱員的所有員工。

例如,如果您有下面的一組員工薪金:

Fred $100 
Bill $80 
John $60 
Jack $50 

那麼你的查詢將返回每個人除了傑克,因爲傑克有3名員工誰擁有更高的薪水比他,但其他人擁有2個或更少。

注意:您的查詢嚴格執行而不是返回薪水最高的三名員工,因爲它不考慮重複的工資。如果您想查詢找到前3員工甚至在關係的存在,你可以試試這個:

SELECT ENAME,SAL 
FROM EMP E 
WHERE (
    SELECT COUNT(DISTINCT SAL) 
    FROM EMP 
    WHERE SAL > E.SAL 
) < 3