古いレコードを数えようとしています。制限を設定したにもかかわらず、Postgresが1160の結果を返すのはなぜですか、LIMIT 1
この場合?
SELECT COUNT(*) FROM data WHERE datetime < '2015-09-23 00:00:00' LIMIT 1;
count
--------
1160
(1 row)
1または0の結果を期待していましたが、1160になります。なぜですか。
常に1行を返す集計関数count()
の結果セットを制限しています。 IE:LIMIT
ingは_FROM data WHERE datetime < '2015-09-23 00:00:00'
_だけではなく、count(*)
関数の出力を制限しています。
基本的に:
FROM data WHERE datetime < '2015-09-23 00:00:00'
_count(*)
sしますLIMIT
s that count
私はあなたがそれをこれにしたいのではないかと思います:
_SELECT COUNT(*) FROM (
SELECT * FROM data WHERE datetime < '2015-09-23 00:00:00' LIMIT 1
);
_
これは基本的に存在チェックなので、次のこともできます。
_SELECT (EXISTS
(SELECT 1 FROM data WHERE datetime < '2015-09-23 00:00:00')
)::integer;
_
Postgresマニュアルから( http://www.postgresql.org/docs/current/static/queries-limit.html ):
制限カウントが指定されている場合、返される行数はその数にすぎません(ただし、クエリ自体が生成する行数が少ない場合は、それより少ない可能性があります)。
制限は、クエリがスキャンする行数を制限しません-レコードセットに表示される行数にのみ影響します。
SELECT
count(x.*) OVER() AS total_count,
x.id,
x.data_name
FROM (
SELECT
id,
data_name
FROM data
WHERE
datetime < '2015-09-23 00:00:00'
LIMIT 1
) x;
それはあなたが望むように結果を与えるでしょう、そしてあなたはフェッチするフィールドをさらに追加し、jsonで集約されたレコードを取得することもできます