首页 > 解决方案 > 了解一些 SQL 子查询示例

问题描述

我一直在从互联网上的资源中自学 SQL。我有两个我想了解的 SQL 查询。

  1. 编写 SQL 查询以从表中获取三个最高薪水。

SELECT distinct Salary from worker a WHERE 3 >= (SELECT count(distinct Salary) from worker b WHERE a.Salary <= b.Salary) order by a.Salary desc;

  1. 编写 SQL 查询以从表中获取三分钟工资。

SELECT distinct Salary from worker a WHERE 3 >= (SELECT count(distinct Salary) from worker b WHERE a.Salary >= b.Salary) order by a.Salary desc;

正如你所看到的,这两个是相似的。我不是特别明白的部分是这样的:

(a.Salary >= b.Salary)或者(a.Salary <= b.Salary)

我不明白这里的逻辑。它在这里做什么?

桌子:

在此处输入图像描述

标签: mysqlsubquery

解决方案


在您对每个给定薪水的查询中,计算出比当前薪水多/少的薪水。如果计数大于 3,则不应显示当前的。这些条件(a.Salary >= b.Salary)负责计算比当前更多/更少的薪水。

但要获得 3 min/max salareis,我会这样做:

SELECT slary
FROM worker
ORDER BY salary DESC
LIMIT 3;

分钟:

SELECT slary
FROM worker
ORDER BY salary ASC
LIMIT 3;

如果一名工人可以拥有多条记录,并且您需要显示最大总数,则为:

SELECT SUM(slary) total_salary
FROM worker
GROUP BY worker_id
ORDER BY salary DESC
LIMIT 3

推荐阅读