我无法理解这个查询:
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条记录到来。
我对此感到困惑。请帮我理解这一点。
答案 0 :(得分:1)
子查询计算整个表中的FIELD1
个值与外部查询(T1.FIELD1
)中的当前值相比更小或相等。因此整个队列就像这样:
如果正好有3个(或4个或4个),则从表
FIELD1
返回TABLE1
个值 你放在那里的任何数字)表FIELD1
中的其他TABLE1
值 它们更小或相等。
请注意,它使用<=
,这意味着子查询将始终返回至少1个。
答案 1 :(得分:0)
该查询会生成一个结果集,其中包含n
中table1
的底部field1
条记录,与n
的值所暗示的顺序相对应,其中n
代表字面数字在where子句中。查询的非空结果集也断言确实有n
个元组来满足比较标准。
n
排名的占有者,前提是可以明确地发布排名。
示例:
想象一下比赛结果如下:
6.米妮老鼠 ...
363。谁
此排名将与您的搜索结果兼容(当然,您通常会将calvin&amp; hobbes的排名标记为4而不是5,因为如果使用您的查询来划分顶级{{1}}参赛者,则必须这样做