2015-02-07 59 views
0

我正在尋找解決方案來從連接表中計算分組行。從連接表中計算分組行

參與者

id |   email   |  date 
----+---------------------------+-------------- 
1 |  [email protected]  | 14/01/2015 
2 |  [email protected]  | 14/01/2015 
3 |  [email protected]  | 01/01/2015 
4 |  [email protected]  | 20/01/2015 
5 | [email protected] | 13/02/2015 
6 | [email protected] | 15/01/2015 

數據

pid | fieldid | data 
----+---------+-------------- 
1 | 1 | Dutch 
1 | 2 | Cheese 
2 | 1 | German 
2 | 2 | Soup 
3 | 1 | German 
3 | 2 | Bread 
4 | 1 | German 
4 | 2 | Sausage 
5 | 1 | Italian 
5 | 2 | Meat balls 
6 | 1 | Italian 
6 | 2 | Pizza 

我想看看如何往往是一個用戶(根據他們的電子郵件地址)參加。但是,下面的查詢返回doenst預期的結果:

SELECT 
    COUNT(*) AS participated, 
    p.email, 
    coalesce(MAX(case when fieldid = 1 then data end), 0) as "language" 
FROM participants p 
LEFT JOIN data d 
    ON d.pid = p.id 
GROUP BY p.email 

結果:

participated |   email   | language 
-------------+---------------------------+------------ 
     2  |  [email protected]  | Dutch 
     6  | [email protected]  | German 
     4  | [email protected] | Italian 

「計數」結果不是我所期望的。它似乎被算爲雙倍。這可能是因爲在參與者表中的每個記錄的數據表中有兩條記錄。

什麼是正確的查詢使用?

回答

0

如果你得到的數據是你有的兩倍,那麼你大概想要count(distinct d.pid)

+0

謝謝!這有效,但我不確定原因。你能說一點嗎? – Kaspar 2015-02-07 21:47:21

+0

因爲你似乎想在'd.pid'中計算不同的值而不是非NULL值的數目。 – 2015-02-07 23:10:00