[英]Return sums instead of values in pivot table like SQL query?
我有一个不错的小查询,除了一点点,几乎可以完成我需要的所有查询。 而不是返回“橙色”和“柠檬”列下的值,我需要知道该属性和水果的提交数量。
这是我的表和一些测试数据:
CREATE TABLE `fruits` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`fruit` varchar(11) DEFAULT NULL,
`fruit_attribute` varchar(11) DEFAULT '',
`submissions` int(11) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=12 DEFAULT CHARSET=utf8;
INSERT INTO `fruits` (`id`, `fruit`, `fruit_attribute`, `submissions`)
VALUES
(1,'Orange','tough peel',59),
(2,'Lemon','tough peel',70),
(3,'Orange','citrus',100),
(4,'Orange','juice',90),
(5,'Lemon','juice',75),
(6,'Lemon','tart',35),
(7,'Lemon','citurs',65),
(8,'Orange','breakfast',110),
(9,'Lemon','lemonaid',120),
(10,'Orange','florida',50);
这是查询:
SELECT
fruit_attribute, submissions,
MAX(IF(t1.fruit = 'Orange', t1.fruit_attribute, NULL)) AS Orange,
MAX(IF(t1.fruit = 'Lemon', t1.fruit_attribute, NULL)) AS Lemon
FROM fruits t1
GROUP BY
fruit_attribute;
非常感谢所有帮助!
我想您想总结一下submissions
列:
SELECT fruit_attribute,
SUM(CASE WHEN t1.fruit = 'Orange' THEN t1.submissions ELSE 0 END) AS Orange,
SUM(CASE WHEN t1.fruit = 'Lemon' THEN t1.submissions ELSE 0 END) AS Lemon
FROM fruits t1
GROUP BY fruit_attribute;
与IF()
,我更喜欢使用CASE
,因为CASE
是标准的,几乎在所有数据库中都可用。
如果您想知道提交的数量,则将sum()与if()一起使用,而不是max():
SUM(IF(t1.fruit = 'Orange', submissions, 0)) AS Orange
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.