请注意:这个问题是关于PostgreSQL和pgAdmin4的,因此它不是关于MySQL的Using COUNT returns different results的重复。
我有一个〜4,000,000条记录表。以下SQL查询:
SELECT COUNT(*) FROM (SELECT * FROM log LIMIT 40000)a WHERE some_column = true
每次执行它都会返回一个不同的值。有什么问题,我该如何解决?
答案 0 :(得分:7)
这是您的查询:
SELECT COUNT(*)
FROM (SELECT * FROM log LIMIT 40000)a
WHERE some_column = true
子查询返回的任意包含40,000行。每次执行查询时,此集合都不同。如果您需要规范集,则需要ORDER BY
和唯一的排序键。
您随后将进行过滤,因此符合您条件的数字是任意的。
如果要在条件为真的情况下任意包含40,000行,只需执行以下操作:
SELECT COUNT(*)
FROM (SELECT l.*
FROM log
WHERE some_column = true
LIMIT 40000
) ;
如果您想要40,000行的随机集,则可以执行以下操作:
SELECT COUNT(*)
FROM (SELECT l.*
FROM log
WHERE some_column = true
ORDER BY random()
LIMIT 40000
) ;
任意<>随机。 (注意:这很昂贵;有更便宜的方法来获取随机集。)
如果您想要一个可重复的样本,那么可以通过多种方法进行。一种是按照唯一ID之类的东西排序,并获取前40,000行:
SELECT COUNT(*)
FROM (SELECT l.*
FROM log l
WHERE some_column = true
ORDER BY primary_key
LIMIT 40000
) ;
这不是随机样本,只是一个可重复样本。