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

标签 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;

最佳答案

从内部 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;

把它们放在一起,我们得到:

独特的薪水,这样的薪水是最差的 3 个薪水之一。

关于MySQL-任何人都可以解释一下这个查询吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37778203/

相关文章:

php - 正在使用数据库中的最后一条记录,而不是所需的记录

php - 查询数据库后使用 php 进行转置

php - 使用仅用于计数的 where 子句获取不同行及其记录计数

mysql - 如何提高对列求和的性能

oracle - 如何在 Oracle 相关子查询连接中使用别名?

php - 如何最好地从带有 php 和 mysql 的分数表中获取某人的 'rank' 而无需循环

mysql - SQL查询从多个表返回数据?

mysql - 嵌套 SQL 查询

mysql - SQL在where子句中使用子选择中的列

MySQL/SQL : Update with correlated subquery from the updated table itself