← 全部文章

技术与生活 / 一篇记录

报表数量对不上,检查 COUNT 的对象

一列允许 NULL 时,已存在的记录不一定拥有该列的值。统计记录总量和统计已填写某字段的数量,应使用不同表达式,才能让业务口径与结果一致。

COUNT(*) 统计行数,COUNT(列) 不统计该列为 NULL 的行。

实际怎么检查

查询示例以 SQLite 为例;notes 为测试表,包含 id、title、score、category、created_at 字段。

SELECT COUNT(*) AS rows, COUNT(score) AS scored FROM notes;

插入一条 score 为空的样本,比较两个结果。

遇到异常再检查什么

在测试表加入零分、空值和正常分数三种记录,比较结果。不要把 COUNT(score) 理解成分数总和,需要总和时应使用 SUM 并单独处理空集。

统计去重值时,还要明确大小写和空值规则。两个看起来相近的字符串是否代表同一对象,取决于业务口径与数据库比较规则,不能在报表末尾再凭经验修正数量。

NULL 不是空字符串,也不是数值零。

参考:SQL 文档。

搜索文章

输入关键词,找回一篇记录。