Sip*_*ipo 0 sql postgresql pgadmin-4
请注意:这个问题是关于PostgreSQL和pgAdmin4的,所以它不是重复使用COUNT返回不同的结果,这是关于MySQL的.
我有一个~4,000,000条记录表.以下SQL查询:
SELECT COUNT(*) FROM (SELECT * FROM log LIMIT 40000)a WHERE some_column = true
Run Code Online (Sandbox Code Playgroud)
每次执行它时都返回一个不同的值.有什么问题,我该如何解决?
这是您的查询:
SELECT COUNT(*)
FROM (SELECT * FROM log LIMIT 40000)a
WHERE some_column = true
Run Code Online (Sandbox Code Playgroud)
子查询返回任意一组40,000行.每次执行查询时,此设置都不同.如果您需要规范集,则需要ORDER BY使用唯一的排序键.
您之后正在过滤,因此符合您条件的数字是任意的.
如果您想要条件为真的任意40,000行,只需执行以下操作:
SELECT COUNT(*)
FROM (SELECT l.*
FROM log
WHERE some_column = true
LIMIT 40000
) ;
Run Code Online (Sandbox Code Playgroud)
如果你想要一个随机的40,000行,你可以这样做:
SELECT COUNT(*)
FROM (SELECT l.*
FROM log
WHERE some_column = true
ORDER BY random()
LIMIT 40000
) ;
Run Code Online (Sandbox Code Playgroud)
任意<>随机.(注意:这是昂贵的;有更便宜的方法来获得随机集.).
如果你想要一个可重复的样本,那么有很多方法可以做到这一点.一种是按照类似于唯一ID的方式进行排序,并获取前40,000行:
SELECT COUNT(*)
FROM (SELECT l.*
FROM log l
WHERE some_column = true
ORDER BY primary_key
LIMIT 40000
) ;
Run Code Online (Sandbox Code Playgroud)
这不是随机样本,只是一个可重复的样本.