我有一个很好的小查询几乎可以做到我需要它除了一点点.我不需要返回"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)
非常感谢所有帮助!
我想你要总结一下这个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)
我更喜欢使用CASE到IF(),因为CASE是标准的,可以在几乎所有的数据库.
| 归档时间: |
|
| 查看次数: |
35 次 |
| 最近记录: |