2017-01-03 4 views
-3

これはどのように句が動作するのですか?このクエリの仕組みを理解できますか?

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

あなたは本当に、サンプルデータを追加する必要があり、さらにその場合:クエリでもネクタイの存在下で、トップ3で従業員を検索したい場合は、これを試すことができますそれを少し狭めたいかもしれません。 –

+0

おそらく、その答えを得るための最も効率的なクエリではありません。 – jarlh

答えて

0

このクエリは、厳密には、給与が高い他の従業員が3人未満のすべての従業員を返します。あなたは従業員と給与の次のセットを持っていた場合

はたとえば、:ジャックは、彼はよりも高い給料を持っている3人の従業員を持っているので

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

次に、あなたのクエリは、ジャックのため除いて皆を返します他の人は2人以下です。

注:クエリは厳密にではありません。は、重複給与を考慮しないため、最高給与の3人の従業員を返します。あなたは、Oracleのサンプル表を使用していない限り

SELECT ENAME,SAL 
FROM EMP E 
WHERE (
    SELECT COUNT(DISTINCT SAL) 
    FROM EMP 
    WHERE SAL > E.SAL 
) < 3 
関連する問題