这与Subquery的相关性如何

时间:2014-05-07 18:44:28

标签: sql

此查询如何运作?

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.

2 个答案:

答案 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