sql - 如何获取表中所有列的重复值计数
问题描述
我有一张这样的桌子,
dept_no | employee_id
1 | 001
1 | 002
2 | 003
2 | 004
我想得到这样的值:
field_name | count_of_distinct_value
dept_no | 2
employee_id| 4
我知道如何获取某个字段的不同值的计数,但不知道如何一次获取所有列。我怎样才能做到这一点?
解决方案
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
推荐阅读
- css - 如何使用 CSS 更改材料图标 angular 7 的字体系列
- javascript - 尝试在 Node.js 中提供 png:无法读取未定义的属性“结束”
- arrays - 3d 矩阵的复杂重塑
- swiftui - 访问扩展中的环境变量
- unity3d - 在多人游戏中计算死亡人数
- java - 日期格式:我想根据格式“0001-01-01-00.00.00.000000”的时间戳获取以下日期格式 25/11/1990 14:35
- reactjs - 如何从 Panresponder onMove 回调(React Native)中的滚动视图中获取我的视图索引
- c++ - 什么是 __lll_lock_wait_private 以及调用 malloc_consolidate 时会导致挂起的原因是什么?
- html - Kendo Angular Donut Chart 样式似乎随机切换
- ruby-on-rails - Cloudflare 源 IP 和机架攻击轨道