select distinct "column" from table;
输出:
column
1 0.0
2 [null]
3 1.0
但是当我尝试计算空值时
select count("column") from train where "column" is NULL;
给出输出 0(零)
你能建议哪里出了问题吗?
使用 count(*)
:
select count(*) from train where "column" is NULL;
count()
任何其他参数计算非 NULL 值,因此如果"column"
NULL
,则没有 NULL 值。
使用 SUM
SELECT SUM(CASE WHEN column IS NULL THEN 1 ELSE 0 END) AS column_null_tally
FROM table;
当您想要计算聚合(包括 NULL 值)上的值但不能使用count(*)
(如果其他列也不同)时,有一些解决方法。
在这些情况下,您可以使用此请求:
count(distinct("column")) + (CASE bool_or("column" is null) WHEN true THEN 1 ELSE 0 END)
count(distinct(column))
将计算非空值,如果存在空值,另一部分将添加1
使用 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";
您得到零是因为您要计算空(空)值,您需要计算非空字段中的值,例如 id 字段。
select count("id_column") from train where "data_column" is NULL;
自
-
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 的人,至少我被困在这里,因为我正在寻找那个)。