【发布时间】:2015-02-18 18:48:47
【问题描述】:
我总共有 3 张桌子
tbl_projects,tbl_bug,tbl_bug_history
我需要为每个项目显示总共 3 个计数。
1.total bug for each projects - 这是来自tbl_bug
- “无效”总计数,“重复”总计数——这是来自错误历史记录
输出应采用以下示例格式
项目名称 |总错误 |无效 |重复 |
项目一 | 5 | 6 | 7 |
请帮我定义下面的表结构
CREATE TABLE IF NOT EXISTS `tbl_bug` (
`id` int(10) NOT NULL AUTO_INCREMENT,
`project_id` int(10) NOT NULL,
`bugname` varchar(250) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=11 ;
转储表tbl_bug的数据
INSERT INTO `tbl_bug` (`id`, `project_id`, `bugname`) VALUES
(1, 1, 'first-bug'),
(2, 1, 'second-bug'),
(3, 1, 'bug-third'),
(4, 1, 'bug-four'),
(5, 1, 'bug-give'),
(6, 1, 'master-bug'),
(7, 2, 'error-notice'),
(8, 3, 'invalid bug'),
(9, 4, 'insufficinet memory'),
(10, 4, 'hello bug');
CREATE TABLE IF NOT EXISTS `tbl_bug_history` (
`id` int(10) NOT NULL AUTO_INCREMENT,
`bug_id` int(10) NOT NULL,
`status` varchar(100) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=21 ;
转储表tbl_bug_history的数据
INSERT INTO `tbl_bug_history` (`id`, `bug_id`, `status`) VALUES
(2, 1, 'invalid'),
(3, 2, 'invalid'),
(6, 3, 'duplicate'),
(7, 4, 'feedback'),
(10, 5, 'duplicate'),
(11, 6, 'duplicate'),
(12, 6, 'invalid'),
(13, 7, 'feedback'),
(14, 7, 'normal'),
(15, 8, 'duplicate'),
(16, 8, 'normal'),
(18, 9, 'feedback'),
(19, 10, 'invalid'),
(20, 10, 'feedback');
CREATE TABLE IF NOT EXISTS `tbl_projects` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`projectname` varchar(250) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=5 ;
转储表tbl_projects的数据
INSERT INTO `tbl_projects` (`id`, `projectname`) VALUES
(1, 'project-one'),
(2, 'project-two'),
(3, 'project-three'),
(4, 'project-four');
【问题讨论】:
-
您的预期输出计数错误
-
是的,我得到了错误的输出
-
select proj.id,proj.projectname,count(bugtbl.id) as totalbug,(select count(id) from tbl_bug_history where bug_id = bugtbl.id and status = 'invalid' ) as invalidcount from tbl_projects proj left join tbl_bug bugtbl on bugtbl.project_id=proj.id group by proj.projectname....... 这个查询将无效计数作为项目一的 1。但实际结果应该是 2。