【问题标题】:SQL Count from joined table连接表中的 SQL 计数
【发布时间】:2013-08-25 02:44:04
【问题描述】:

我有一个表“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

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

【问题讨论】:

    标签: mysql sql count group-by


    【解决方案1】:

    以下工作正常!谢谢.. 仍然不太确定 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
    

    【讨论】:

    • distinct 将查找非空唯一值,如果您进行编程,请尽量不要在表名中使用荷兰语。当你是荷兰人时,我知道这很难。我能理解表名,但不能理解这个网站上的英文人..
    • 谢谢!我会记住非荷兰语的事情。我正在考虑翻译它,但表名真的很重要吗? :)
    • 如果关系不清楚,你没有给出结构,那么是的,表名很重要,如果你在 SQL 语句中混合阅读英语和荷兰语,它不会读起来很好..
    • 如果有帮助,别忘了接受 GordonLinoff 的 original 回答。这样做可以鼓励其他人帮助您解决未来的问题。
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-07-04
      • 2015-01-01
      • 2023-02-03
      • 1970-01-01
      • 2015-11-23
      • 2021-10-19
      相关资源
      最近更新 更多