即使它= NULL,MYSQL单表计数()也会显示

时间:2012-08-06 14:28:50

标签: mysql sql

我一直在寻找谷歌 - 我可能只是愚蠢地理解答案。

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

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

每个问题都有一个状态。

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

SELECT状态,COUNT(*)为'总'FROM问题WHERE(DATE(logged_at)> =)GROUP BY状态

有5种不同的状态 -

报告 不固定 固定 升级 称为

问题是 - 我的选择只显示状态,如果计数> 0.即使count = null,我如何显示所有状态?

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

非常感谢!!!

2 个答案:

答案 0 :(得分:1)

解决方案是您已经涉及的内容:来自具有所有这5种状态的表的LEFT JOIN。如果您没有这样的表,您可以将其创建为permament或动态(每次需要时):

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 ;

答案 1 :(得分:1)

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

然后,下面的SQL应该可以解决这个问题:

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

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