带有计数查询的MySQL案例

带有计数查询的MySQL案例,mysql,Mysql,我以前也问过类似的问题,但我意识到我想要的结果是完全不同的 我有以下疑问 SELECT LEVEL, COUNT(*) AS total FROM admin_xxx GROUP BY LEVEL ORDER BY total DESC LIMIT 10 表输出 Level Total 4 27 3 24 7 19 5 10 8 9 6 7 1 5 2 3 现在我只想用单词而不是数字来重命名实际

我以前也问过类似的问题,但我意识到我想要的结果是完全不同的

我有以下疑问

SELECT LEVEL, COUNT(*) AS total FROM admin_xxx
GROUP BY LEVEL ORDER BY total DESC LIMIT 10
表输出

Level  Total
4       27
3       24
7       19
5       10
8       9
6       7
1       5
2       3
现在我只想用单词而不是数字来重命名实际级别

我想将以下内容作为输出

Level     Total
Bronze      27
Silver      24
Gold        19
Gold2       10
Gold3       9
Gold4       7
Gold5       5
Gold6       3
每10个级别都有一个单独的级别名称

我尝试了以下操作,但出现语法错误

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

将您的
分组方式更改为

GROUP BY (
    CASE
        WHEN LEVEL = 1 THEN "Bronze",
        etc...
        WHEN LEVEL = 10 THEN "Gold10"
    END
)
您的
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

你把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

您还可以将标高/标签分隔到另一个表中,并可以将这些标高/标签连接起来。 例如:

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
这是级别表:

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

试试这个:显然,您应该按以下方式使用
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

在一个表上进行简单的连接应该会更容易,该表包含级别名称及其id,然后按级别名称分组。另外,通过这种方式,您的级别名称不会硬编码到您的sqlI中。我尝试了您的代码,但出现了以下错误:1064-您的SQL语法有错误;检查与您的MariaDB服务器版本对应的手册,以了解在第3行“当级别=10时,然后“Gold10”结束为级别”附近使用的正确语法。我尝试了您的代码,但出现错误:1064-您的SQL语法有错误;检查与您的MariaDB服务器版本相对应的手册,以了解在第3行中使用接近“当级别=10时,则“Gold10”结束)作为级别,计数(*)作为”的正确语法