有谁能解释一下下面关于获得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) ;
型
有谁能解释一下吗?如果有其他方法可以得到相同的结果,请咨询我的查询
8条答案
按热度按时间kqhtkvqz1#
字符串
这个查询从外部查询(即
emp
a
)获取所有记录,并逐个迭代它们,将值传递给内部查询。让我们举一个例子:
1.它获取第一行,即
1, 300
,并将此值传递给内部查询1.内部查询尝试查找小于或等于
emp
表b
中记录的非重复sal
值1.计数为3,因为
50
,200
,150
小于300
。由于3 >= 3
(内部查询结果),答案为true
,并选择300
。1.现在外部循环计数器到达第二行,即
2, 50
。它将值传递给内部查询,在这种情况下,count不满足3 >=
条件,因此50
未被选中。1.现在
400
,在这种情况下,内部查询返回4
,因此它满足条件,因此选择400
1.现在
200
,在本例中,内部查询返回3
,因此也选择了它1.现在
150
,在本例中,内部查询返回2
,因此这已被过滤掉1.因此,结果将是
400
,300
,200
被选中。jexiocij2#
这是一种奇怪的方法,但它会工作。基本上,对于表emp的每一行,它都会在子查询中计算该表中的薪水数量,当给定时,这些薪水会更大:
字符串
如果此类工资的数量不超过三个:
型
这是三大工资之一。
最简单的方法是这样的:
型
rdlzhqv93#
基本上,你的朋友建议你用关系代数的方法来处理最大属性问题。
首先,这个查询将帮助您找出最高工资
字符串
其次,内部聚合函数是统计最高工资发生的次数
型
最后,3>=基本上是检查最高工资是否出现了三次以上。因此,如果表中有少于三个员工都有最高工资,则不会找到结果。
型
webghufk4#
更好的选择:
字符串
b4lqfgs45#
另一个选项使用ROW_NUMBER函数:
字符串
hgb9j2n66#
字符串
非常简单,
mwyxok5s7#
最简单的方法是这样的:
第一个月
以上报表针对工资“N”执行。
如果您需要员工的工资在n1_maximum到n2_maximum之间,则可以使用以下查询。
select distinct salary from employees order by salary desc LIMIT 3 OFFSET 4;
个bn31dyow8#
--编写一个SQL查询,从一个表中获取三个最大工资。
字符串