0

我无法理解这个查询:

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 条记录就来了。

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

4

2 回答 2

1

子查询计算整个表中有多少FIELD1值小于或等于外部查询 ( T1.FIELD1) 中的当前值。因此整个队列就是这样工作的:

如果表中恰好有 3 个(或 4 个或您放在那里的任何数字)其他 小于或等于的值FIELD1,则从表中返回值。TABLE1FIELD1TABLE1

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

于 2013-08-01T10:47:11.767 回答
0

该查询生成一个结果集,该结果集由与 where的值隐含的排序相关的底部n记录组成,其中 where表示 where 子句中的文字数字。查询的非空结果集还断言恰好有元组满足比较标准。table1field1nn

因此,您可以计算n锦标赛中排名第 3 位的人数,前提是排名可以明确发布。

例子:

想象一个锦标赛结果如下:

  1. 史酷比
  2. 唐老鸭
  3. 米老鼠
  4. 卡尔文
    霍布斯

  6.米妮老鼠...

363.无论是谁

此排名将与您的结果兼容(当然,您通常会将 calvin & hobbes 的排名标记为 4 而不是 5,如果使用您的查询来确定顶级n参赛者,您必须这样做)。

于 2013-08-01T10:54:39.857 回答