2017-06-06 87 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 

這樣,你只計數獲取的子查詢執行一次,你的外部查詢確實對所得到的結果集的處理。