PostgreSQL:统计多列合并后的唯一值总数
统计PostgreSQL两列所有值的唯一值总数的最优实现
要统计表中col1、col2两列所有值的唯一值总数(而非两列的组合唯一数),最优的做法是直接在数据库层面完成合并与去重统计,无需将数据导出到应用层再处理:
SELECT COUNT(DISTINCT val) AS unique_total FROM ( -- 将两列数据合并为单列 SELECT col1 AS val FROM your_table UNION ALL SELECT col2 AS val FROM your_table ) AS combined_values;
为什么这个写法高效?
- 用
UNION ALL快速合并两列数据(不会提前去重,比UNION少一步操作),再通过外层的COUNT(DISTINCT)一次性统计所有唯一值,避免了额外的中间数据处理。 - 全程在数据库内部执行,减少了数据传输开销,比先查询两列数据再在应用层去重计数的效率高得多。
示例验证
假设你的表数据如下:
| col1 | col2 |
|---|---|
| a | b |
| b | c |
| a | a |
执行上述查询后,会返回3(对应唯一值a、b、c),完全符合需求。
而如果用错误的组合唯一数查询:
SELECT COUNT(DISTINCT (col1, col2)) FROM your_table;
会返回3(对应三个不同的(col1,col2)组合),虽然数值巧合相同,但逻辑完全不符合需求。
内容的提问来源于stack exchange,提问作者OcMaRUS
相关产品推荐
相关产品推荐

