首页 > 解决方案 > 如何获取表中所有列的重复值计数

问题描述

我有一张这样的桌子,

dept_no | employee_id 
1       | 001
1       | 002
2       | 003
2       | 004

我想得到这样的值:

field_name | count_of_distinct_value
dept_no    | 2
employee_id| 4

我知道如何获取某个字段的不同值的计数,但不知道如何一次获取所有列。我怎样才能做到这一点?

标签: sqlpostgresql

解决方案


select key, count(distinct value)
from (select (jsonb_each(to_jsonb(t.*))).* from pg_class as t) as tt
group by key;

这绝对不是最有效的解决方案,但它适用于任何表。只需替换pg_class为所需的表名。

PS:提出这个解决方案我很痛苦。想象一下有 100M 行和 100 列的表。然后 PostgreSQL 应该用 10000000000 行来构建和排序中间数据。

如果您不想要确切的数字而只想要评估,那么请特别查看该列中的pg_stats表格。n_distinct


推荐阅读