【问题标题】:My table has multiple columns & I want to fetch count of values in each column & display the count values for each column separately in postgresql我的表有多个列,我想获取每列中的值计数并在 postgresql 中分别显示每列的计数值
【发布时间】:2021-11-25 10:04:28
【问题描述】:

我想从表的每一列中获取每个非空项的计数值。该表包含 86 列,我希望表格格式的输出具有:

列名 |数

感谢您在这方面的任何帮助。谢谢

【问题讨论】:

    标签: sql postgresql select count aggregate-functions


    【解决方案1】:

    这是我的建议的说明。
    查询的第一部分(t CTE 定义)是特定于表的,因为它需要列出所有列名。我希望在适当的 SQL 客户端的帮助下,这将是微不足道的。其余的都是通用的。

    create temporary table the_table (x integer, y integer, z integer);
    insert into the_table
    values 
    (null, 1, 1), (null, 2, 2), (3, 3, 3), (4, null, 4), 
    (5, 5, 5),  (6, null, 6), (7, 7, null), (null, 8, 8);
    
    with t(x, y, z) as 
    (
     select count(x), count(y), count(z) from the_table
    ),  
    u as 
    (
     select l.* 
     from t 
     cross join lateral jsonb_each_text(to_jsonb(t)) l
    )
    select 
        key as column_name, value::integer as count_of_values
    from u;
    
    column_name count_of_values
    x 5
    y 6
    z 7

    【讨论】:

      【解决方案2】:

      您当然可以这样做:

      select 'col1' as column_name, count(col1) from mytable
      union all
      select 'col2' as column_name, count(col2) from mytable
      union all
      ...
      select 'col86' as column_name, count(col86) from mytable;
      

      (这很容易编写。例如,您可以将表格列表放入 Excel 中,应用连接公式,从而立即获得整个查询。)

      【讨论】:

      • (number_of_columns) 次扫描?
      • @Stefanov.sm:可能。除非优化器足够聪明,可以看穿这一点。然而,这是一个非常不寻常的查询,无论如何它可能是一次性的。那么为什么要打扰;-)
      • 我和你在一起:)
      【解决方案3】:

      您可以使用to_jsonb() 将所有列动态转换为行,然后按列名分组和计数:

      select j.column_name, count(j.value)
      from the_table t
        cross join lateral jsonb_each_text(jsonb_strip_nulls(to_jsonb(t))) as j(column_name, value)
      group by j.column_name
      order by j.column_name;
      

      Online example

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-11-20
        • 1970-01-01
        • 2021-08-28
        相关资源
        最近更新 更多