SQL查询:: number =在where子句中选择查询

时间:2013-08-01 10:19:02

标签: sql

我无法理解这个查询:

SELECT FIELD1 FROM TABLE1 T1
WHERE 3 = (
    SELECT COUNT(FIELD1)
    FROM TABLE1 T2
    WHERE T2.FIELD1 <= T1.FIELD1
);

此查询正常运行,没有任何错误。内部计数查询返回结果为363。 在where子句中如果我放3 = (select..然后我得到一个结果。如果我放4=(select..那么没有记录。如果我放363 = (select...,则会有3条记录到来。

我对此感到困惑。请帮我理解这一点。

2 个答案:

答案 0 :(得分:1)

子查询计算整个表中的FIELD1个值与外部查询(T1.FIELD1)中的当前值相比更小或相等。因此整个队列就像这样:

  

如果正好有3个(或4个或4个),则从表FIELD1返回TABLE1个值   你放在那里的任何数字)表FIELD1中的其他TABLE1值   它们更小或相等。

请注意,它使用<=,这意味着子查询将始终返回至少1个。

答案 1 :(得分:0)

该查询会生成一个结果集,其中包含ntable1的底部field1条记录,与n的值所暗示的顺序相对应,其中n代表字面数字在where子句中。查询的非空结果集也断言确实有n个元组来满足比较标准。

因此,你可以计算锦标赛中n排名的占有者,前提是可以明确地发布排名。

示例:

想象一下比赛结果如下:

  1. scooby doo
  2. donald duck
  3. 米老鼠
  4. 卡尔文
    霍布斯
  5. 6.米妮老鼠 ...

    363。谁

    此排名将与您的搜索结果兼容(当然,您通常会将calvin&amp; hobbes的排名标记为4而不是5,因为如果使用您的查询来划分顶级{{1}}参赛者,则必须这样做