sql - Count(*) 在每次执行时返回不同的结果
问题描述
请注意:这个问题是关于 PostgreSQL 和 pgAdmin4 的,所以它不是重复使用 COUNT 返回不同的结果,这是关于 MySQL 的。
我有一个 ~4,000,000 条记录表。以下 SQL 查询:
SELECT COUNT(*) FROM (SELECT * FROM log LIMIT 40000)a WHERE some_column = true
每次执行时返回不同的值。有什么问题,我该如何解决?
解决方案
这是您的查询:
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
) ;
这不是一个随机样本,只是一个可重复的样本。
推荐阅读
- kerberos - gss_accept_sec_context() 错误:ASN.1 结构缺少必填字段
- angular - Angular 构建错误:请添加 @NgModule 注释 - ng-click-outside?
- python - 在 python 中读取 .opus 音频文件
- mysql - MySQL 未启动 - XAMPP
- javascript - 使用 react-google-maps/api 时如何正确处理路线更改?
- python - 如何在 tkinter 中定位布局?
- typescript - 无法使用玩笑模拟 S3 `deleteObjects`
- visual-studio-code - 远程 ssh 连接失败,在 vscode 的输出中出现此错误消息(我正在使用 ssh 扩展从 linux 服务器 18 连接到 mac)
- r - 控制许多拼凑而成的 ggplots 的宽度
- c# - 无法将“System.DBNull”类型的对象转换为“System.DateTime”类型