我有这张桌子:
+----+--------+-------+
| id | fruit | a-b-c |
+----+--------+-------+
| 1 | orange | a |
+----+--------+-------+
| 2 | banana | c |
+----+--------+-------+
| 3 | orange | c |
+----+--------+-------+
| 4 | orange | a |
+----+--------+-------+
| 5 | orange | b |
+----+--------+-------+
现在,我想根据sum
值a-b-c
,a=1
和b=2
列出所有水果和c=3
。所以,这将是我想要的结果:
+--------+-----+
| fruit | sum |
+--------+-----+
| banana | 3 |
+--------+-----+
| orange | 7 |
+--------+-----+
我很确定我应该使用case
,但我不知道如何总结它们。我脑子里有这样的事情:
SELECT
fruit,
sum(a-b-c)
CASE
WHEN a-b-c = 'a' THEN +=1
ELSE
CASE
WHEN a-b-c= 'b' THEN +=2
ELSE
CASE
WHEN a-b-c= 'c' THEN +=3
END AS sum
FROM tbl_fruits
GROUP BY fruit;
答案 0 :(得分:7)
您可以使用条件聚合:
SELECT fruit, SUM(CASE `a-b-c`
WHEN 'a' THEN 1
WHEN 'b' THEN 2
WHEN 'c' THEN 3
END) AS total
FROM tbl_fruits
GROUP BY fruit;
的 SqlFiddleDemo
强>
输出:
╔═════════╦═══════╗
║ fruit ║ total ║
╠═════════╬═══════╣
║ banana ║ 3 ║
║ orange ║ 7 ║
╚═════════╩═══════╝
或者使用ELT/FIELD
:
SELECT fruit, SUM(ELT(FIELD(`a-b-c`,'a','b','c'),1,2,3)) AS total
FROM tbl_fruits
GROUP BY fruit;
的 SqlFiddleDemo2
强>