MySQL-任何人都可以解释这个查询

时间:2016-06-12 19:22:59

标签: mysql subquery correlated-subquery

我想了解以下查询:

SELECT DISTINCT salary 
FROM employees a 
WHERE 3 >= (
    SELECT COUNT(DISTINCT salary) 
    FROM employees b 
    WHERE b.salary <= a.salary
) 
ORDER BY a.salary DESC;

2 个答案:

答案 0 :(得分:1)

我认为这个查询应该返回3个最差的工资!

答案 1 :(得分:1)

从内部SELECT(相关的子查询)开始。将对外部查询中的每一行执行此类查询。那它做了什么?

返回小于或等于当前员工工资的独特工资数量。

SELECT COUNT(DISTINCT salary) 
FROM employees b 
WHERE b.salary <= a.salary

那么,给定外部选择的当前行的数字,这有什么作用?返回从子查询返回的数字小于或等于3的唯一工资(按顺序)。

SELECT DISTINCT salary 
FROM employees a 
WHERE 3 >= (some number)
ORDER BY a.salary DESC;

总而言之,我们取道:

如果薪水是最差的薪水之一,那么薪水就是独一无二的。