2017-06-06 40 views
0
SELECT '2017-05-30' AS `short_date`, 
     'Stats' AS `group`, 
     'Active ' AS `subgroup`, 
     '' AS `row`, 
     CASE 
WHEN COUNT(DISTINCT(guild_name)) >= 1 AND COUNT(DISTINCT(guild_name)) <= 5 THEN '1 - 5 ' 
WHEN COUNT(DISTINCT(guild_name)) >= 6 AND COUNT(DISTINCT(guild_name)) <= 10 THEN '6 - 10 ' 
WHEN COUNT(DISTINCT(guild_name)) >= 11 AND COUNT(DISTINCT(guild_name)) <= 15 THEN '11 - 15 ' 
WHEN COUNT(DISTINCT(guild_name)) >= 16 AND COUNT(DISTINCT(guild_name)) <= 20 THEN '16 - 20 ' 
WHEN COUNT(DISTINCT(guild_name)) >= 21 AND COUNT(DISTINCT(guild_name)) <= 25 THEN '21 - 25 ' 
WHEN COUNT(DISTINCT(guild_name)) >= 30 THEN '> 30' END AS `value` 
FROM table 
WHERE guild_name !=0 
GROUP BY 
       `short_date`, 
       `group`, 
       `subgroup` 

如何不计算每种情况下的值,如何计算一次并在每种情况下使用?在求和时使用求和函数

+0

你的问题看起来像https://stackoverflow.com/questions/11754781/how-to-declare-a-variable-in-mysql –

+1

你正在为你的三个GROUP BY字段的字符串?所有这个查询将返回的是一行不同的guild_names。您是否计划稍后扩展此版本以针对多个short_dates,群组和子群组运行? – ScottieB

+0

@ScottieB是的,我愿意 – Ekaterina

回答

3

你怎么样移动计数的子查询和外移动的情况是这样的:

select `short_date`, `group`, `subgroup`, `row`, 
CASE 
    WHEN nb_guild >= 1 AND nb_guild <= 5 THEN '1 - 5 ' 
    WHEN nb_guild >= 6 AND nb_guild <= 10 THEN '6 - 10 ' 
    WHEN nb_guild >= 11 AND nb_guild <= 15 THEN '11 - 15 ' 
    WHEN nb_guild >= 16 AND nb_guild <= 20 THEN '16 - 20 ' 
    WHEN nb_guild >= 21 AND nb_guild <= 25 THEN '21 - 25 ' 
    WHEN nb_guild >= 30 THEN '> 30' 
END AS `value` 
from 
(
    SELECT '2017-05-30' AS `short_date`, 
      'Stats' AS `group`, 
      'Active ' AS `subgroup`, 
      '' AS `row`, 
      COUNT(DISTINCT(guild_name)) as nb_guild 
    FROM table 
    WHERE guild_name !=0 
    GROUP BY 
        `short_date`, 
        `group`, 
        `subgroup` 
) as subquery 

这样,你只计数获取的子查询执行一次,你的外部查询确实对所得到的结果集的处理。