此查询如何运作?
select Salary
from Example e1
where 3 =
(select count(distinct Salary)
from Example e2
where e1.Salary <= e2.Salary);
SRC表
ID Name Salary DEP
1 A 100.0000 AB
2 b 10.0000 BC
3 c 10.0000 BC
4 d 50.0000 CD
结果是10.
答案 0 :(得分:1)
它为外部查询中的每一行找到不同工资的不同计数,其中Salary
less 大于或等于行中的Salary
从外部查询。最后,如果子查询返回了3个不同的工资,那么它只返回外部查询中的行。
呃,我不确定除了阅读查询本身之外什么都不清楚,但我试过了。 :P
因此,例如,如果表格如下所示:
Salary
======
10000
20000
30000
40000
50000
60000
当外部查询正在评估10000
时,它不会被返回,但是当它正在评估40000
时它将会被返回。事实上,它的编写方式,即返回的唯一行。
查询的一个问题是它也在计算自己,因为它没有使用任何id过滤掉自己。
答案 1 :(得分:0)
通过逐行评估,或许最容易理解发生了什么。子选择评估为:
100 - &gt; 1
10 - &gt; 3
50 - &gt; 2
谓词3 = ( select ... )
因此对于薪水10的两行计算结果为true,所以答案应为:
10
10