来自连接表的SQL计数

时间:2013-08-22 11:34:38

标签: mysql sql count group-by

我有一张桌子'lijsten',一张桌子'werknemerlijsten'和一张桌子'类别'。

现在我正在使用查询来获取计数

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

知道我可能做错了什么吗?感谢

2 个答案:

答案 0 :(得分:6)

您的left join正在引入具有针对给定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;

另一种方法是在连接之前聚合表,在子查询中进行计数。

答案 1 :(得分: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