显示表中的所有列以及每列中填充的记录数
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 在下面提到的标准中查找表中的唯一记录(在所有列中)?