2013-08-22 111 views
2

我有一個表'lijsten',一個表'werknemerlijsten'和一個表'categorieen'。來自已加入表的SQL計數

現在,我使用的查詢,以獲得數

SELECT id, naam, beschrijving, count(wl.werknemer_id) as aantal 
FROM lijsten l 
LEFT JOIN werknemerlijsten wl 
ON l.id = wl.lijst_id 
GROUP BY l.naam 
ORDER BY naam 

但是當我試圖用另算相同的查詢,從另一個表,結果都是假的。

SELECT l.id, l.naam, beschrijving, count(c.lijst_id) as aantal_cat, count(wl.lijst_id) as aantal_lijst 
FROM lijsten l 
LEFT JOIN werknemerlijsten wl ON l.id = wl.lijst_id 
LEFT JOIN categorieen c ON l.id = c.lijst_id 
GROUP BY l.naam 
ORDER BY naam 

任何想法我可能做錯了什麼?謝謝

回答

5

您的left join s正在引入表中有多個匹配給定的id。快速和簡單的方法來解決計數是使用count(distinct)而不是count()

SELECT l.id, l.naam, beschrijving, 
     count(distinct c.lijst_id) as aantal_cat, count(distinct wl.lijst_id) as aantal_lijst 
FROM lijsten l 
LEFT JOIN werknemerlijsten wl ON l.id = wl.lijst_id 
LEFT JOIN categorieen c ON l.id = c.lijst_id 
GROUP BY l.naam 
ORDER BY naam; 

的另一種方法是聚集表在連接前,做計數的子查詢。

0

以下是工作!謝謝..還是不太清楚這個區別在做什麼......它正在尋找獨特的價值?謝謝!

SELECT l.id, l.naam, beschrijving, count(distinct wl.werknemer_id) as aantal_lijst,  count(distinct c.id) as aantal 
    FROM lijsten l 
    LEFT JOIN werknemerlijsten wl ON l.id = wl.lijst_id 
    LEFT JOIN categorieen c ON c.lijst_id = wl.lijst_id 
    GROUP BY l.naam 
    ORDER BY naam 
+0

distinct將會尋找非空的唯一值,並且如果您編程的話,請不要在表名中使用荷蘭語。當你是荷蘭人時,我知道它很難。我可以理解這個網站上的表名,但不是英文版的人.. –

+0

謝謝!我會記住這個非荷蘭的東西。我正在考慮翻譯它,但表名真的很重要? :) – Notflip

+0

如果關係不清楚,那麼你沒有給出結構,然後是表名很重要,如果你閱讀英語和荷蘭語混合在一個SQL語句中,它可以很好的閱讀。 –