如何在postgresql中计算空值?

How to count null values in postgresql?

提问人:Surjya Narayana Padhi 提问时间:12/27/2018 更新时间:11/16/2023 访问量:25244

问:

select distinct "column" from table;

输出:

    column
1     0.0
2     [null]
3     1.0

但是当我尝试计算空值时

select count("column") from train where "column" is NULL;

给出输出 0(零)

你能说说哪里出了问题吗?

sql postgresql 计数 null

评论

6赞 Yogesh Sharma 12/27/2018
提示:使用代替 .count(*)column_name

答:

21赞 Gordon Linoff 12/27/2018 #1

用:count(*)

select count(*) from train where "column" is NULL;

count()使用任何其他参数计数非 NULL 值,因此没有 if is 。"column"NULL

8赞 Guigoz 1/27/2020 #2

当您想要计算聚合(包括 NULL 值)但无法使用(如果其他列也不同)时,有一些解决方法。count(*)

在这些情况下,您可以使用以下请求:

count(distinct("column")) + (CASE bool_or("column" is null) WHEN true THEN 1 ELSE 0 END)

将计算非 null 值,如果有 null 值,另一部分将添加count(distinct(column))1

18赞 Eldar Agalarov 2/10/2021 #3

使用 SUM

SELECT SUM(CASE WHEN column IS NULL THEN 1 ELSE 0 END) AS column_null_tally
FROM table;

评论

0赞 Vasilii Suricov 11/16/2023
SUM((column IS NULL)::int) AS column_null_tally也会做同样的事情
0赞 Luis Garcia 12/24/2021 #4

你得到零,因为你要计算 null(空)值,你需要计算不为空的字段的值,比如 id 字段。

select count("id_column") from train where "data_column" is NULL;
5赞 Vasilii Suricov 2/4/2022 #5

使用 FILTER

SELECT
  COUNT(*) FILTER (WHERE "column" IS NULL) AS is_null,
  COUNT(*) FILTER (WHERE "column" < 1.0) AS lt_one,
  COUNT(*) FILTER (WHERE "column" > 1.0) AS gt_one,
  COUNT(*) FILTER (WHERE "column" = 1.0) AS just_perfect
FROM "table";
0赞 questionto42 12/18/2022 #6

因为

  • select count(coalesce(t."column", 0)) from table t是完整的行数,带和不带 NULL:s 和
  • select count(t."column") from table t是没有 NULL:s 的行数,

这也有效:

Select count(coalesce(t."column", 0)) - count(t."column") FROM table t;

(这个答案也可能帮助那些来这里计算 NULL 和不 NULL 的人,至少我被困在这里,因为我正在寻找它)。