我正在尝试使用MySQL/SQL查询和学习复杂查询的教程。MySql/SQL Orderby和Condition
下面是一个运行良好的查询,但结果集不可理解。
该查询从每个部门检索“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>和订购1,3确实在查询?
,以便了解我已运行查询的WHERE单独查询原因如下:
SELECT COUNT(e1.sal)
FROM emp e1
WHERE e.deptno = '1';
上面的查询返回我DEPTNO计数值为“1”。
所以这意味着每个部门都会被计算在内!
我不确定在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;
对不起,不提供小提琴..
子查询会递归吗?在e.sal
TomPHP
这个工资怎么比较在同一张表之间.. – TomPHP
不,不是递归的。外部选择需要一行。然后使用外部选择的值(e.deptno,e.sal)执行内部选择,并将它们用作内部选择的where子句中的参数。并为emp表中的每一行执行此操作。 – peterm