postgresql组计数使用快速方式

时间:2017-07-07 04:12:30

标签: postgresql group-by distinct

我的表T有2列,如下例所示:

C1      C2
----------
A       x
A       x
A       y
B       x
B       x

我想计算C1中每个值的不同C2的数量。这个结果应该是:

C1      distinct count
----------------------
A       2               // count distinct x,x,y = 2
B       1               // count distinct x,x = 1

很容易出现像这样的SQL查询

select C1, count(distinct C2) from T group by C1

但是,如postgresql COUNT(DISTINCT …) very slow中所述,此查询会产生较差的效果。我想使用该文章中建议的改进查询(count (*) (select distinct ...)),但我不知道如何使用group by形成查询。

1 个答案:

答案 0 :(得分:2)

如果您想避免DISTINCT关键字

,请尝试此查询

示例数据:

stackoverflow=# select * from T;
 c1 | c2 
----+----
 A  | x
 A  | x
 A  | y
 B  | x
 B  | x
(5 rows)

查询:

stackoverflow=# WITH count_distinct as (SELECT C1 FROM T GROUP BY c1,c2)
SELECT c1,count(c1) FROM count_distinct GROUP BY C1;  --updated missing group by

输出:

 c1 | count 
----+-------
 B  |     1
 A  |     2
(2 rows)

相同的输出,但你应该首先尝试性能。