任何人都可以解释以下查询获得3个最高薪水吗?
select distinct sal
from emp a
where 3 >= (select count(distinct sal)
from emp b
where a.sal <= b.sal)
order by a.sal desc;
有人向我提出使用上述查询获得最多3次。表中的工资。我不明白查询的下面部分发生了什么:
3>= (select count(distinct sal)
from emp b
where a.sal <= b.sal) ;
任何人都可以解释一下吗?如果有任何其他方法可以得到相同的结果,请咨询我
答案 0 :(得分:7)
empid sal
===============
1 300
2 50
3 400
4 200
5 150
================
select distinct sal from emp a where 3 --outer query
>=
(select count(distinct sal) from emp b --inner query(correlated)
where a.sal <= b.sal) order by a.sal desc;
答案 1 :(得分:2)
这是一种奇怪的方式,但它会起作用。基本上,对于表emp的每一行,它计算该表中的工资数量,在给定时,它们在子查询中更大:
select count(distinct sal)
from emp b
where a.sal <= b.sal
如果这样的工资数量不超过三个:
3>= (select count(distinct sal)
from emp b
where a.sal <= b.sal)
然后这是三个最大的工资之一。
嗯,最简单的方法就是这样:
SELECT RES.SAL FROM (SELECT DISTINCT SAL FROM EMP ORDER BY 1 DESC) RES
WHERE ROWNUM <= 3
答案 2 :(得分:2)
基本上你的朋友建议你使用关系代数方法来处理max属性问题。查看(How can I find MAX with relational algebra?)或谷歌
首先,此查询将帮助您找出最高薪水
select sal from emp b where a.sal <= b.sal
其次,内部聚合函数是计算最高工资的发生次数
count(distinct sal)
最后,3&gt; =基本上是检查最大工资是否超过三次。因此,如果该表的雇员人数少于三人,并且没有找到任何结果。
3>= (select count(distinct sal) from emp b where a.sal <= b.sal) ;
答案 3 :(得分:0)
更好的选择:
SELECT sal
FROM (SELECT sal,RANK() OVER (ORDER BY sal DESC) r FROM stats)
WHERE R <= 3
答案 4 :(得分:0)
使用ROW_NUMBER函数的另一个选项:
SELECT * FROM TABLE_NAME QUALIFY ROW_NUMBER OVER(ORDER BY SAL DESC) <=3
答案 5 :(得分:0)
---找到2个最大声明的emp细节
select * from emp_data a
where 2 >= (select COUNT(distinct sal)
from emp_data b
where a.sal <= b.sal)
非常简单且最容易
答案 6 :(得分:0)
最简单的方法是这样的:
select distinct salary from employees order by salary desc LIMIT 3;
以上陈述是针对薪水的“ N ”。
如果您需要雇员的薪水从n1_maximum到n2_maximum ,则可以使用以下查询。
select distinct salary from employees order by salary desc LIMIT 3 OFFSET 4;