Mysql 通过连接多个表来汇总小计和总计

Mysql 通过连接多个表来汇总小计和总计,mysql,Mysql,延伸 我可以得到行的滚动求和的基本结果,所以我尝试通过连接多个表来扩展查询,但1_keyworddefs.name='K2'不受影响。为1_关键字defs.name='K1'和K2获得相同的答案 工作查询,但直接指定1_bugs.bug_id='2': 通过联接表进行的非工作查询(期望得到如上所述的答案): 实际: **这里错误地出现了bug\u id->3行,因为1\u bug.bug.id=1\u keywords.bug\u id不匹配,并且1\u keywords表中没有1\u keyw

延伸

我可以得到行的滚动求和的基本结果,所以我尝试通过连接多个表来扩展查询,但1_keyworddefs.name='K2'不受影响。为1_关键字defs.name='K1'和K2获得相同的答案

工作查询,但直接指定1_bugs.bug_id='2': 通过联接表进行的非工作查询(期望得到如上所述的答案): 实际: **这里错误地出现了bug\u id->3行,因为1\u bug.bug.id=1\u keywords.bug\u id不匹配,并且1\u keywords表中没有1\u keywords.bug\u id='3'

DDLs:


有人能告诉我我做错了什么吗?

很明显,有些地方不清楚。。。经过长时间的讨论,您想要的是从bugzilla数据库中提取一个特定关键字的bug列表,按日期分组,加上cf1+cf2的总和,以及相同的仅“打开”和“验证”bug的总和

我们开始

SELECT
  b.lastdiffed,
  d.name,
  d.description,
  SUM(IF(b.bug_status IN('CLOSED', 'VERIFIED'), b.cf1 + b.cf2, 0)) AS sub_total,
  SUM(b.cf1 + b.cf2) AS running
FROM
  bugs AS b
  JOIN keywords AS k
    ON ( k.bug_id = b.bug_id )
  JOIN keyworddefs AS d
    ON ( d.id = k.keywordid )
WHERE 
  1
  AND d.name = 'SONY'
GROUP BY (b.lastdiffed)
ORDER BY b.lastdiffed ASC
给出这个结果

+------------+------+-------------+-----------+---------+
| lastdiffed | name | description | sub_total | running |
+------------+------+-------------+-----------+---------+
| 2016-05-20 | SONY | sony items  |         7 |       7 |
| 2016-06-20 | SONY | sony items  |        11 |      17 |
| 2016-06-27 | SONY | sony items  |         5 |       5 |
| 2016-06-29 | SONY | sony items  |         5 |       5 |
+------------+------+-------------+-----------+---------+

希望这能有所帮助。

我在这方面取得了进展,几乎接近成功,但关键字名称没有受到影响,现在有人可以看一下吗?编辑它的查询和答案。还记得你上次经历的步骤吗?对不起,伙计!我已经输入了几乎所有需要的信息,而不是像我的第一篇文章一样,你能给我指出确切的问题,这样我就可以改进它并添加缺少的信息吗?你还没有提供想要的结果。现在请看,谢谢斯特瓦贝里帮我解决。再一次,您的帮助需要通过连接表来获得输出。提前谢谢!谢谢你的回答,但道达尔错了,这和sub_total是一样的。抱歉,Antony,但我需要一个total=前一行total+当前total,我使用草莓的答案得到它,但当我试图将bug+关键字与1_关键字匹配时,它给了我一个问题。bug_id=1_bug.bug_id和1_关键字defs.name=1_关键字。关键字id。如果我指定,我得到的输出与问题的实际输出相同y、 臭虫id
SELECT x.*, x.cf1 + x.cf2 sub_total, sum(y.cf1 + y.cf2) total FROM 1_bugs x INNER JOIN 1_bugs y ON y.bug_id <= x.bug_id LEFT JOIN 1_keywords ON 1_keywords.bug_id = y.bug_id LEFT JOIN 1_keyworddefs ON 1_keyworddefs.id=1_keywords.keywordid AND 1_keyworddefs.name='K2' and 1_keywords.bug_id = y.bug_id WHERE (x.bug_date BETWEEN '2016-07-19' AND '2016-07-22') AND (y.bug_status = 'CLOSED' OR y.bug_status = 'VERIFIED') GROUP BY x.bug_id; 
bug_id  bug_date    cf1     cf2     bug_status  sub_total   total   
2       2016-07-19  2       1       VERIFIED    3           3
 bug_id     bug_date    cf1     cf2     bug_status  sub_total   total   
 2          2016-07-19  2       1       VERIFIED    3           3
 3          2016-07-22  2       2       CLOSED      4           7
-- 1_bugs table1 (master table) :

CREATE TABLE `1_bugs` (`bug_id` int(11) NOT NULL, `bug_date` date NOT NULL, `cf1` int(11) NOT NULL, `cf2` int(11) NOT NULL, `bug_status` varchar(200) NOT NULL) ENGINE=InnoDB DEFAULT CHARSET=latin1;

INSERT INTO `1_bugs` (`bug_id`, `bug_date`, `cf1`, `cf2`, `bug_status`) VALUES (1, '2016-07-19', 3, 2, 'RESOLVED'), (2, '2016-07-19', 2, 1, VERIFIED'), (3, '2016-07-22', 2, 2, 'CLOSED');

-- 1_keywords table2 (having keyword ids):

CREATE TABLE `1_keywords` (`bug_id` int(11) NOT NULL, `keywordid` varchar(11) NOT NULL) ENGINE=InnoDB DEFAULT CHARSET=latin1;

INSERT INTO `1_keywords` (`bug_id`, `keywordid`) VALUES (1, 'K1'), (2, 'K2');


-- 1_keyworddefs table3 (having keyword names according to keywordid):

CREATE TABLE `1_keyworddefs` (`id` int(11) NOT NULL, `name` varchar(200) NOT NULL, `description` varchar(200) NOT NULL) ENGINE=InnoDB DEFAULT CHARSET=latin1;

INSERT INTO `1_keyworddefs` (`id`, `name`, `description`) VALUES (1, 'K1', 'My K1 item'), (2, 'K2', 'My K2 item');
SELECT
  b.lastdiffed,
  d.name,
  d.description,
  SUM(IF(b.bug_status IN('CLOSED', 'VERIFIED'), b.cf1 + b.cf2, 0)) AS sub_total,
  SUM(b.cf1 + b.cf2) AS running
FROM
  bugs AS b
  JOIN keywords AS k
    ON ( k.bug_id = b.bug_id )
  JOIN keyworddefs AS d
    ON ( d.id = k.keywordid )
WHERE 
  1
  AND d.name = 'SONY'
GROUP BY (b.lastdiffed)
ORDER BY b.lastdiffed ASC
+------------+------+-------------+-----------+---------+
| lastdiffed | name | description | sub_total | running |
+------------+------+-------------+-----------+---------+
| 2016-05-20 | SONY | sony items  |         7 |       7 |
| 2016-06-20 | SONY | sony items  |        11 |      17 |
| 2016-06-27 | SONY | sony items  |         5 |       5 |
| 2016-06-29 | SONY | sony items  |         5 |       5 |
+------------+------+-------------+-----------+---------+