6

テーブル「lijsten」、テーブル「werknemerlijsten」、テーブル「categorieen」があります。

今、私はクエリを使用してカウントを取得しています

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

しかし、別のテーブルから別のカウントで同じクエリを試すと、結果は false になります。

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

私が間違っているかもしれないことは何ですか?ありがとう

4

2 に答える 2

8

あなた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;

別のアプローチは、結合の前にテーブルを集計し、サブクエリでカウントを行うことです。

于 2013-08-22T11:43:11.323 に答える
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
于 2013-08-22T12:03:16.263 に答える