我的表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形成查询。
答案 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)
相同的输出,但你应该首先尝试性能。