【问题标题】:How to show rows with zero counts in mySQL group by query?如何通过查询显示 mySQL 组中计数为零的行?
【发布时间】:2011-09-29 22:45:57
【问题描述】:

我尝试四处寻找类似的解决方案,但对我来说似乎没有多大帮助。我有一张这样的桌子:

locations => |longname|name|locations|

topics    => |longname|name|tag|

我正在尝试获取特定位置的特定 atag 的长名称计数。到目前为止,我的查询也试图强制重新排序,这就是为什么你会看到 location INFIELD。但是,如果某个特定标签的位置没有任何人,它会从响应中完全忽略它。我希望它返回 0。我该怎么做?

select count(b.longname) as count, a.location 
 from `topics` b, locations a 
  where tag = 'atag' and a.longname = b.longname 
  and location IN ('Japan', 'France', 'Italy') 
  group by location 
  order by FIELD(location, 'Japan', 'France', 'Italy')

【问题讨论】:

    标签: mysql sql


    【解决方案1】:

    也许是这个? :

    SELECT COUNT(t.longname) as cnt, l.location 
    FROM locations l 
      LEFT JOIN topics t
        ON  t.longname = l.longname
        AND t.tag = 'atag'      
    WHERE l.location IN ('Japan', 'France', 'Italy') 
    GROUP BY l.location 
    ORDER BY FIELD(l.location, 'Japan', 'France', 'Italy')
    

    【讨论】:

    • 这行得通。看起来非常复杂,不是吗?我很高兴它有效!
    • @ypercube:我的 Brainfart - +1 为你抓住它。
    • @Rio:这个问题很常见。搜索 OUTER JOIN / INNER JOIN differences 了解为什么会发生这种情况以及如何避免这种情况。 (非常)简短的解释:stackoverflow.com/questions/6527608/…
    • 而且你真的不应该使用WHERE 来连接表格。
    • @Rio:不,这不是关于性能,而是关于代码维护和可读性。在包含 10 个表的 JOIN 中,WHERE 中的 (9) 个连接条件以及其他几个条件使得查询非常难以阅读。如果缺少连接条件也不容易发现。在这里查看答案(如果你搜索 SO,你会发现很多关于这个的其他讨论和 cmets):stackoverflow.com/questions/128965
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-01
    • 2023-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多