我相信你可以用“有条件的聚集”是这样的:
SELECT
YEAR(counts.ts) as SalesYear
, SUM(case when counts.count = 104 then counts.count else 0 end) AS Res1
, SUM(case when counts.count = 107 then counts.count else 0 end) AS Res2
FROM counts
WHERE counts.name IN (104,107)
AND counts.count > 0
GROUP BY YEAR(counts.ts)
ORDER BY YEAR(counts.ts)
;
作为样本数据,现已通过sqlfiddle实例提供,下面是现在有关。请注意,上面的查询,如查询是问题,条件错误地基于列counts.count
而不是counts.name
。一旦纠正了完全相同的查询结构,就会提供结果。 (请注意,我可能不知道这一点没有看到数据。)
SQL Fiddle
的MySQL 5.6架构设置:
DROP TABLE IF EXISTS `counts`;
CREATE TABLE `counts` (
`id` int(15) NOT NULL AUTO_INCREMENT,
`name` varchar(16) DEFAULT NULL,
`ts` datetime DEFAULT NULL,
`count` int(11) DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `UniqueDataIndex` (`name`,`ts`,`count`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=475152 DEFAULT CHARSET=utf8;
INSERT INTO `counts` VALUES ('475026', '107 ', '2015-01-27 10:18:00', '40');
INSERT INTO `counts` VALUES ('475032', '104 ', '2015-01-27 10:20:00', '11');
INSERT INTO `counts` VALUES ('475039', '107 ', '2015-01-27 10:22:00', '109');
INSERT INTO `counts` VALUES ('475046', '104 ', '2015-01-27 10:24:00', '92');
INSERT INTO `counts` VALUES ('475052', '107 ', '2015-01-27 10:26:00', '124');
INSERT INTO `counts` VALUES ('475058', '104 ', '2016-01-27 10:28:00', '98');
INSERT INTO `counts` VALUES ('475069', '107 ', '2016-01-27 10:32:00', '77');
INSERT INTO `counts` VALUES ('475075', '104 ', '2016-01-27 10:34:00', '44');
INSERT INTO `counts` VALUES ('475081', '107 ', '2016-01-27 10:36:00', '43');
INSERT INTO `counts` VALUES ('475087', '104 ', '2016-01-27 10:38:00', '89');
INSERT INTO `counts` VALUES ('475093', '107 ', '2016-01-27 10:40:00', '89');
查询1:
SELECT
YEAR(counts.ts) as SalesYear
, SUM(case when counts.name = '104' then counts.count else 0 end) AS Res1
, SUM(case when counts.name = '107' then counts.count else 0 end) AS Res2
FROM counts
WHERE counts.name IN ('104','107')
AND counts.count > 0
GROUP BY YEAR(counts.ts)
ORDER BY YEAR(counts.ts)
Results:
| SalesYear | Res1 | Res2 |
|-----------|------|------|
| 2015 | 103 | 273 |
| 2016 | 231 | 209 |
您是否收到任何错误消息? – Sheepy
在From子句中输入错误?一些错误或空的结果? – Daredzik
btw:删除第一个从开始括号括起来'(计数'它不是必需或做任何有用的事情 –