显示表中的所有列以及每列中填充的记录数

Posted

技术标签:

【中文标题】显示表中的所有列以及每列中填充的记录数【英文标题】:Display all columns in table with the count of populated records in each column 【发布时间】:2013-01-17 00:53:00 【问题描述】:

我需要编写一个语句来显示表中的每一列、填充该列的记录的计数和百分比,以及不同的值计数。

例如,如果我有一个表地址包含:

Addr1 | AddrText  | PostalCode
11111 | demo ave  | 91210
22222 | demo2 ave | null
33333 | null      | null

它应该显示如下内容:

columns    | Count | Percentage
Addr1      | 3     | 100
AddrText   | 2     | 66.6
PostalCode | 1     | 33.3

或者让列保持不变,只将数据作为行,但我认为上面可能更容易。

ps:如果我的格式不正确,我很抱歉,但我希望你能明白。

【问题讨论】:

【参考方案1】:

您可以使用UNION ALL unpivot 列,然后应用聚合函数来获取计数和百分比:

select col,
  count(case when col is not null and value is not null then 1 end) CntCol,
  (count(case when col is not null and value is not null 
         then 1 end) / count(col))*100.0 Percentage
from
(
  select 'Addr1' col, Addr1 value
  from yourtable
  union all 
  select 'AddrText' col, AddrText value
  from yourtable
  union all 
  select 'PostalCode' col, PostalCode value
  from yourtable
) src
group by col

见SQL Fiddle with Demo

结果是:

|        COL | CNTCOL | PERCENTAGE |
------------------------------------
|      Addr1 |      3 |        100 |
|   AddrText |      2 |   66.66667 |
| PostalCode |      1 |   33.33333 |

【讨论】:

【参考方案2】:
SELECT 'Addr1' col, 
       COUNT(Addr1) cntcol, COUNT(addr1)/count(*) percentage
FROM yourtable
union all
SELECT 'AddrText' col, 
       COUNT(AddrText) cntcol, COUNT(AddrText)/count(*) percentage
FROM yourtable
union all
SELECT 'PostalCode' col, 
       COUNT(PostalCode) cntcol, COUNT(PostalCode)/count(*) percentage
FROM yourtable

【讨论】:

以上是关于显示表中的所有列以及每列中填充的记录数的主要内容,如果未能解决你的问题,请参考以下文章

一个表中的一条记录显示在另一个表上的所有记录中

我的表有多个列,我想获取每列中的值计数并在 postgresql 中分别显示每列的计数值

如何使用 Snowflake Javascript 存储过程或函数遍历表中的所有列?

如何使用 SQL 或 Python 在下面提到的标准中查找表中的唯一记录(在所有列中)?

如何计算 Access 2010 表中所有列中的所有 NULL 值?

使卡片列中的第二张卡片填充所有剩余宽度