PostgreSQL 9.6中如何统计唯一数据对的数量?
解决PostgreSQL中
count(distinct a, b)报错的问题 这个问题我碰到过很多次啦——PostgreSQL的count(distinct)并不支持直接传入多列参数,你写的count(distinct a, b)会被它当成要找一个接受两个整数参数的count函数,自然就报找不到的错误了。下面给你几个靠谱的解决办法:
方法1:将多列包装成行类型(最简洁)
把a和b放在括号里,让PostgreSQL把它们识别为一个行对象,这样distinct就能正确判断唯一的组合了:
select count(distinct (a, b)) from t;
这个写法是最直接的,适合只需要统计唯一数据对数量的场景。
方法2:用DISTINCT ON配合子查询
如果之后还需要查看具体的唯一数据对,这种方法会更灵活:
select count(*) from ( select distinct on (a, b) a, b from t ) as unique_pairs;
子查询里的distinct on (a, b)会先筛选出所有不重复的(a,b)组合,外层再用count(*)统计这些组合的数量。
方法3:通过GROUP BY分组计数
另一种思路是先按a和b分组,再统计分组的数量:
select count(*) from ( select 1 from t group by a, b ) as unique_pairs;
group by a, b会把相同的(a,b)组合归为一组,每组返回一个固定值(这里用1就行),外层的count(*)就能得到唯一数据对的总数。
内容的提问来源于stack exchange,提问作者Fomalhaut
相关产品推荐
相关产品推荐

