MySQL/SQL クエリを試し、複雑なクエリのチュートリアルを学習しています。
以下は、前述のように正常に実行されるクエリですが、結果セットは理解できません。
クエリは、各部門から「2」人の最も高給の従業員を取得します。
SELECT deptno, empno, sal
FROM emp e
WHERE
2 > ( SELECT COUNT(e1.sal)
FROM emp e1
WHERE e.deptno = e1.deptno AND e.sal < e1.sal )
ORDER BY 1,3 DESC;
しかし、この2 >とOrder by 1,3がクエリで何をするのか理解できません。
クエリを理解するために、次のように WHERE 原因クエリを個別に実行しました。
SELECT COUNT(e1.sal)
FROM emp e1
WHERE e.deptno = '1';
上記のクエリは、値が「1」の deptno の数を返しました。
つまり、各部門がカウントされます!!
e.sal < e1.sal
??で正確に何が起こるかわかりません 再帰的に実行されていますか?? 最高賃金の従業員を計算するには??
誰かがクエリを理解するのを手伝ってくれますか!
上記のロジックを理解できれば、以下のクエリのロジックを理解できます。
4th Top Salary of all the employees:
SELECT DEPTNO, ENAME, SAL
FROM EMP A
WHERE
3 = (SELECT COUNT(B.SAL) FROM EMP B
WHERE A.SAL < B.SAL) ORDER BY SAL DESC;
フィドルを提供していないことをお詫び申し上げます..