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

但是,当我从另一个表尝试使用另一个计数的相同查询时,结果是错误的。

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

以下工作!谢谢.. 仍然不太确定 distinct 在做什么.. 它在寻找独特的价值吗?谢谢!

 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 回答