2017-07-07 48 views
1

我得到表T與2列作爲遵循例如:PostgreSQL的組計數不同使用快速方式

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討論,這個查詢產量表現不佳。我想按照該文章的建議使用改進的查詢(conut(*)(select distinct ...)),但我不知道如何使用group by構建查詢。

回答

1

,如果你想避免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) 

的輸出結果相同,但ÿ你應該首先嚐試性能。

+1

您錯過了GROUP BY c1 for第二查詢 –

+0

@OtoShavadze謝謝您指出它我會更新它 –