Amy 原创整理|资料核验:2026-10-30
PostgreSQL官方文档区分两种计数:COUNT(*)计算输入行数;COUNT(表达式)只计算表达式结果不是NULL的行。字段允许缺失时,后者不能直接当作总记录数。
教学例子:同一结果集有三行,某数值字段依次是10、NULL、0。COUNT(*)为3,COUNT(该字段)为2。0是一个有效数值,不是NULL,因此会被计数。
Amy建议:做数据质量报表时,把总行数与字段非空数量分开命名;需要缺失数量时,在同一筛选范围内比较两者。若先做了连接或过滤,应先确认统计的是哪一批结果行。
另外,官方说明SUM在没有任何输入行时返回NULL,而不是自动返回0。是否将其转成0应由业务含义决定,不能只为报表看起来整齐就抹去“没有数据”与“数值为零”的差别。
官方来源:
https://www.postgresql.org/docs/current/functions-aggregate.html