COUNT(*) 给出超过 1 且 LIMIT 1?

hap*_*set 7 postgresql count limits

我正在尝试计算旧记录。LIMIT 1在这种情况下,即使我设置了一些限制,为什么 Postgres 仍会给出 1160 的结果?

SELECT COUNT(*) FROM data WHERE datetime < '2015-09-23 00:00:00' LIMIT 1;
Run Code Online (Sandbox Code Playgroud)
 count
--------
1160
(1 row)
Run Code Online (Sandbox Code Playgroud)

我期望的结果是 1 或 0,但结果是 1160。为什么?

Phi*_*lᵀᴹ 15

您正在限制聚合函数的结果集count(),它将始终返回 1 行。IE:它限制了count(*)函数的输出,而LIMIT不仅仅是FROM data WHERE datetime < '2015-09-23 00:00:00'.

基本上:

  • Postgres 读取所有行 FROM data WHERE datetime < '2015-09-23 00:00:00'
  • Postgres 然后count(*)是他们
  • PostgresLIMIT就是这样 count

我怀疑你想要它这样做:

SELECT COUNT(*) FROM ( 
    SELECT * FROM data WHERE datetime < '2015-09-23 00:00:00' LIMIT 1
);
Run Code Online (Sandbox Code Playgroud)

由于这基本上是一项存在检查,因此还可以执行以下操作:

SELECT (EXISTS 
           (SELECT 1 FROM data WHERE datetime < '2015-09-23 00:00:00')
       )::integer;
Run Code Online (Sandbox Code Playgroud)