MySQL总和基于col值

fis*_*g3r 5 mysql sql

我有这张桌子:

+----+--------+-------+
| 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=2c=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)

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

SqlFiddleDemo

输出:

???????????????????
? 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)

SqlFiddleDemo2