繁体   English   中英

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

[英]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;

这是演示的sqlfiddle页面

非常感谢所有帮助!

我想您想总结一下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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM