我有这张桌子:
+----+--------+-------+
| id | fruit | a-b-c |
+----+--------+-------+
| 1 | orange | a |
+----+--------+-------+
| 2 | banana | c |
+----+--------+-------+
| 3 | orange | c |
+----+--------+-------+
| 4 | orange | a |
+----+--------+-------+
| 5 | orange | b |
+----+--------+-------+
Run Code Online (Sandbox Code Playgroud)
现在我想列出所有的水果,并sum根据a-b-c价值观.a=1,b=2和c=3.所以,这将是我想要的结果:
+--------+-----+
| fruit | sum |
+--------+-----+
| banana | 3 |
+--------+-----+
| orange | 7 |
+--------+-----+
Run Code Online (Sandbox Code Playgroud)
我很确定我应该使用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;
Run Code Online (Sandbox Code Playgroud)
您可以使用条件聚合:
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;
Run Code Online (Sandbox Code Playgroud)
输出:
???????????????????
? fruit ? total ?
???????????????????
? banana ? 3 ?
? orange ? 7 ?
???????????????????
Run Code Online (Sandbox Code Playgroud)
另外使用ELT/FIELD:
SELECT fruit, SUM(ELT(FIELD(`a-b-c`,'a','b','c'),1,2,3)) AS total
FROM tbl_fruits
GROUP BY fruit;
Run Code Online (Sandbox Code Playgroud)