[英]MySQL CASE with COUNT query
I asked a similar question before but I realized my desired output is totally different. 之前我问过类似的问题,但是我意识到我想要的输出完全不同。
I have the following query 我有以下查询
SELECT LEVEL, COUNT(*) AS total FROM admin_xxx
GROUP BY LEVEL ORDER BY total DESC LIMIT 10
Table output 表输出
Level Total
4 27
3 24
7 19
5 10
8 9
6 7
1 5
2 3
Now I just want to rename the actual level with words instead of numbers. 现在,我只想用单词而不是数字来重命名实际级别。
I would like to following as output 我想作为输出
Level Total
Bronze 27
Silver 24
Gold 19
Gold2 10
Gold3 9
Gold4 7
Gold5 5
Gold6 3
Each 10 levels have a separate level name. 每10个级别都有一个单独的级别名称。
I tried the following but get syntax error 我尝试了以下操作,但语法错误
SELECT LEVEL, COUNT(*) AS total FROM admin_xxx
CASE
WHEN LEVEL = 1 THEN "Bronze",
etc...
WHEN LEVEL = 10 THEN "Gold10"
END as LEVEL
GROUP BY LEVEL ORDER BY total DESC LIMIT 10
Change your GROUP BY
to 将您的GROUP BY
更改为
GROUP BY (
CASE
WHEN LEVEL = 1 THEN "Bronze",
etc...
WHEN LEVEL = 10 THEN "Gold10"
END
)
You also have syntax error on your SELECT
您的SELECT
也有语法错误
SELECT (
CASE
WHEN LEVEL = 1 THEN "Bronze",
etc...
WHEN LEVEL = 10 THEN "Gold10"
END
) AS LEVEL
, COUNT(*) AS total
FROM admin_xxx
GROUP BY (
CASE
WHEN LEVEL = 1 THEN "Bronze",
etc...
WHEN LEVEL = 10 THEN "Gold10"
END
)
ORDER BY total DESC LIMIT 10
you have from clause in the wrong position 您的from子句位置错误
SELECT
CASE
WHEN LEVEL = 1 THEN "Bronze"
WHEN LEVEL = 10 THEN "Gold10"
END as LEVEL
, COUNT(*) AS total
FROM admin_xxx
GROUP BY LEVEL ORDER BY total DESC LIMIT 10
You can also separate yours levels/labels to another table, and you can join these. 您还可以将您的级别/标签分离到另一个表,然后可以将它们连接起来。 For example: 例如:
SELECT levels.level_label, COUNT(*) AS total
FROM admin_xxx
LEFT JOIN levels ON levels.label_value = admin_xxx.level
GROUP BY levels.level_label ORDER BY total DESC LIMIT 10
And this is the levels table: 这是级别表:
id level_label label_value
1 Bronze 10
2 Silver 9
3 Gold 1
4 Gold2 2
5 Gold3 3
6 Gold4 4
7 Gold5 5
8 Gold6 6
9 Gold7 7
10 Gold8 8
TRY THIS: Obviously you should use CASE
in the following way to achieve the desired output 尝试一下:显然,您应该通过以下方式使用CASE
来获得所需的输出
SELECT CASE level
WHEN 1 THEN 'Bronze'
WHEN 2 THEN 'Silver'
WHEN 3 THEN 'Gold'
WHEN 4 THEN 'Gold2'
WHEN 5 THEN 'Gold3'
WHEN 6 THEN 'Gold4'
WHEN 6 THEN 'Gold5'
WHEN 6 THEN 'Gold6'
ELSE 'Unknown' END Level,
COUNT(*) AS total
FROM admin_xxx
GROUP BY level
ORDER BY total DESC LIMIT 10
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.