mysql聚合困难

时间:2011-04-11 03:49:40

标签: mysql group-by

我的数据库中有两个表结构:

CREATE TABLE `projects` (
 `id` int(11) NOT NULL AUTO_INCREMENT,
 `name` varchar(32) DEFAULT NULL,
 `description` varchar(128) DEFAULT NULL,
 PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=8 DEFAULT CHARSET=utf8

CREATE TABLE `issues` (
 `id` int(11) NOT NULL AUTO_INCREMENT,
 `member_id` varchar(10) DEFAULT NULL,
 `project_id` int(11) DEFAULT NULL,
 `name` varchar(32) DEFAULT NULL,
 `description` varchar(128) DEFAULT NULL,
 `date_created` date DEFAULT NULL,
 `type` enum('general','bug','requirement') DEFAULT NULL,
 `priority` enum('low','medium','high') DEFAULT NULL,
 `status` enum('resolved','open','discarded') DEFAULT NULL,
 PRIMARY KEY (`id`),
 KEY `member_id` (`member_id`),
 KEY `project_id` (`project_id`)
) ENGINE=MyISAM AUTO_INCREMENT=9 DEFAULT CHARSET=utf8

我要做的是创建一个select语句,该语句返回项目名称以及与该项目关联的已解决问题的数量。我创建了以下SQL语句:

select projects.name, count(*) from projects left join issues on projects.id = issues.project_id where status = 'resolved' group by projects.name

然而,这仅返回至少有一个已解决问题的项目,我需要它来返回具有0个已解决问题的项目。

我已经做了任何mySQL已经有一段时间了,有人可以帮帮忙吗?感谢。


我以为我会提供更多信息,因为我还没有收到有效的答案。如果我为每个项目有四个项目和一个问题,其中两个问题被“解决”,我希望返回查询:

project_name    | count(*)
--------------------------
first_project   | 1
second_project  | 0
third_project   | 0
fourth_project  | 1

但是,查询仅返回至少有一个已解决问题的项目。

project_name   | count(*)
-------------------------
first_project  | 1
fourth_project | 1

1 个答案:

答案 0 :(得分:1)

将您的查询更改为:

   SELECT p.name, count(i.*)
     FROM PROJECTS p    
LEFT JOIN ISSUES i ON p.id = i.project_id 
                  AND i.status = 'resolved'
 GROUP BY projects.name

在where子句中使用“status ='resolved'”导致它只返回那些至少有一个问题的项目