编写查询以显示最近3个低薪水?

时间:2018-11-29 05:24:57

标签: sql oracle

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

任何人都可以解释此查询吗?

2 个答案:

答案 0 :(得分:3)

这是您的查询,格式正确:

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

对于表中的每个工人,子查询将查找其工资比外部查询中的工人工资高 的工人数/人数。查询将仅返回三个或三个以下其他工人的薪水更高的作品。

还有另一种使用分析函数编写查询的方式:

SELECT DISTINCT salary
FROM
(
    SELECT salary, DENSE_RANK() OVER (ORDER BY salary DESC) dr
    FROM Worker
) t
WHERE dr <= 3;

编辑:

在Oracle中编写查询的最简单方法是:

select salary
from (select distinct salary
      from worker
      order by salary
     ) s
where rownum <= 3

答案 1 :(得分:2)

如果您想显示最后3个低薪水,也可以将其写为

myMap.set({ key: loss.affectedOn }, loss);