【问题标题】:MYSQL Single Table Count() show even if it = NULLMYSQL Single Table Count() 显示即使它 = NULL
【发布时间】:2012-08-06 14:28:50
【问题描述】:

我一直在谷歌上搜索 - 我可能只是愚蠢地理解了答案。

我在 mysql 中有一个表 - 问题。

+-------------+---------------+------+-----+---------+----------------+
| Field       | Type          | Null | Key | Default | Extra          |
+-------------+---------------+------+-----+---------+----------------+
| id          | int(11)       | NO   |
| status      | varchar(255)  | YES  |
+-------------+---------------+------+

每个问题都有一个状态。

我正在尝试选择来计算所有问题并按状态列出它们:

SELECT status,COUNT(*) as 'total' FROM issues WHERE (DATE(logged_at) >= ) GROUP BY status

有 5 种不同的状态 -

报告 不固定 固定的 升级 参考

问题是 - 我的选择仅在 count > 0 时显示状态。即使 count = null 我如何显示所有状态?

我试过 IFNULL 但没有运气。我还看到人们谈论左连接解决方​​案,但那是多表问题。

非常感谢!!!

【问题讨论】:

  • 一个多表问题。您需要一张列出状态的表格和一张包含数据的表格。

标签: mysql sql


【解决方案1】:

解决方案是您进入的:LEFT JOIN 来自具有所有这 5 种状态的表。如果您没有这样的表,您可以永久创建或动态创建(每次需要时):

SELECT 
    st.status
  , COUNT(issues.status) AS total
FROM 
    ( SELECT 'Active' AS status UNION ALL
      SELECT 'Inactive' UNION ALL
      ... 
      SELECT 'Super'
    ) AS st
  LEFT JOIN 
    issues 
      ON  issues.status = st.status
      AND issues.logged_at >= ?        -- no reason to use DATE() function here
GROUP BY st.status ;

【讨论】:

    【解决方案2】:

    您将需要一个额外的表(例如称为状态)来存储所有状态的列表,即与问题表中相同类型的一个字段,并确保在该字段上放置索引。

    那么下面的 SQL 应该可以解决问题:

    select statuses.status,count(issues.id) from issues right join statuses on issues.status=statuses.status group by statuses.status
    

    附加表的优点是,如果您决定拥有另一个状态,您只需将其添加到表中,而无需更改任何现有 SQL 语句。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-12-01
      • 2012-04-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-09
      • 1970-01-01
      • 2011-07-23
      相关资源
      最近更新 更多