Database 在PostgreSql中计算null和notnull列

Database 在PostgreSql中计算null和notnull列,database,postgresql,Database,Postgresql,我需要计数每行有空值和非空值的列, 但是我不知道如何在PostgreSql中实现这一点。您只需要在count()中指定列名,它将跳过null:s SELECT COUNT(*) as countNullRows FROM yourTable WHERE columnName IS NULL; SELECT COUNT(*) as countNonNullRows FROM yourTable WHERE columnName IS NOT NULL; select avg(c),count(c

我需要计数每行有空值和非空值的列,
但是我不知道如何在PostgreSql中实现这一点。

您只需要在count()中指定列名,它将跳过null:s

SELECT COUNT(*) as countNullRows FROM yourTable WHERE columnName IS NULL;
SELECT COUNT(*) as countNonNullRows FROM yourTable WHERE columnName IS NOT NULL;
select avg(c),count(c) from (select generate_series(1,10) union select null) as a(c);
忽略from之后的内容,它只是返回一个值列表

更清楚地说:

select
  avg(c),
  count(c) count_column,
  count(*) count_star,
  sum(c),
  array_agg(c)
from (
  select generate_series(1,10) union select null order by 1
) as a(c);

        avg         | count_column | count_star | sum |          array_agg          
--------------------+--------------+------------+-----+-----------------------------
 5.5000000000000000 |           10 |         11 |  55 | {1,2,3,4,5,6,7,8,9,10,NULL}
(1 row)

您只需要在count()中指定列名,它将跳过null:s

select avg(c),count(c) from (select generate_series(1,10) union select null) as a(c);
忽略from之后的内容,它只是返回一个值列表

更清楚地说:

select
  avg(c),
  count(c) count_column,
  count(*) count_star,
  sum(c),
  array_agg(c)
from (
  select generate_series(1,10) union select null order by 1
) as a(c);

        avg         | count_column | count_star | sum |          array_agg          
--------------------+--------------+------------+-----+-----------------------------
 5.5000000000000000 |           10 |         11 |  55 | {1,2,3,4,5,6,7,8,9,10,NULL}
(1 row)


把你的问题弄清楚。@tchelidze你能更好地理解吗?把你的问题弄清楚。@tchelidze你能更好地理解吗?rowName是每一列的名称??对不起,我弄错了。我想写专栏名(编辑答案)。。。这是您要检查的列的名称,它的值是否为null或非null。但是如果有多个列,我必须在where子句中每列添加一个列?您不需要where,只需计数(columnName),它将跳过null:s但他正在计算所有行,而不是每行。我尝试了这个“选择COUNT(*)作为countNullRows,*FROM posts group by id”rowName是每个列的名称??对不起,我的错误。我想写专栏名(编辑答案)。。。这是您要检查的列的名称,它的值是否为null或非null。但是如果有多个列,我必须在where子句中每列添加一个列?您不需要where,只需计数(columnName),它将跳过null:s但他正在计算所有行,而不是每行。我尝试了“选择COUNT(*)作为countNullRows,*FROM posts group by id”如何在这个查询中添加我的SELECT FROM表?我尝试从select null更改为select columnsName from table,但不起作用。select count(column_name),avg(column_name)from table_name,但此“select count(column_name),avg(column_name)from table_name)”与select generate_系列中的union不在一起?我不明白我的选择表是从哪里输入的。你根本不需要生成序列的东西,从表中选择计数(列名称),平均值(列名称)是完整的查询。对不起,我不明白你的意思。请将你的表添加到你正在尝试的问题和查询中。还举了一个示例,说明您想要什么样的输出—如何在此查询中添加my select from表?我尝试从select null更改为select columnsName from table,但不起作用。select count(column_name),avg(column_name)from table_name,但此“select count(column_name),avg(column_name)from table_name)”与select generate_系列中的union不在一起?我不明白我的选择表是从哪里输入的。你根本不需要生成序列的东西,从表中选择计数(列名称),平均值(列名称)是完整的查询。对不起,我不明白你的意思。请将你的表添加到你正在尝试的问题和查询中。这也是您想要的输出的示例