返回总和而不是像SQL查询那样的数据透视表中的值?

lcm*_*lcm 2 mysql sql

我有一个很好的小查询几乎可以做到我需要它除了一点点.我不需要返回"Orange"和"Lemon"列下的值,而是需要知道该属性和水果的提交数量.

这是我的表和一些测试数据:

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);
Run Code Online (Sandbox Code Playgroud)

这是查询:

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;
Run Code Online (Sandbox Code Playgroud)

这是一个演示的sqlfiddle页面

非常感谢所有帮助!

Gor*_*off 5

我想你要总结一下这个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;
Run Code Online (Sandbox Code Playgroud)

我更喜欢使用CASEIF(),因为CASE是标准的,可以在几乎所有的数据库.