Mysql top5 и оставшаяся сумма как другие

В основном я пытаюсь суммировать значения всех кварталов по компаниям и группировать оставшиеся в других в одном запросе sql. Я видел несколько примеров здесь, но я не могу заставить его работать.

Это мой запрос:

SELECT name, ifnull(q1_2014,0) + ifnull(q2_2014,0) + 
ifnull(q3_2014,0) + ifnull(q4_2014) as yearly

select (CASE    

WHEN @curRank < 5 THEN yearly ELSE 'others' 
                END AS yearly)

group others
where country ='Russia';

Мой стол

Название страны q1_2014 q2_2014 q3_2014 q4_2014
Российская Компания A    6   6   6   6
Российская Компания B    5   5   5   5
Российская Компания C 4 4 4 4
Российская Компания D    3   3   3   3
Российская Компания E    2   2   2   2
Россия Компания F    1   1   1   1
Российская компания G    1   1   1   1
Российская Компания H    1   1   1   1
Российская компания I    1   1   1   1
Российская Компания J    1   1   1   1
Российская КомпанияК 1 1 1 1

Ожидаемый результат должен быть суммой компании, сгруппированной по годам в топ-5 и оставшейся суммой, сгруппированной в других.

Компания A    24
CompanyB    20
CompanyC    16
Компания D    12
Компания 8
Другие 24

Что я делаю неправильно?

1 ответ

Проверь это

select IF(rank <=5,name,'others') as Company,sum(yearly) from( SELECT  `name`, IFNULL(`q1_2014`,0)+IFNULL( `q2_2014`,0)+ IFNULL(`q3_2014`,0)+ IFNULL(`q4_2014`,0) as yearly,
@curRank := @curRank + 1 AS rank
from Table1,(SELECT @curRank := 0) r   where country='Russia' ORDER BY yearly desc) as Table2 group by company

DEMO

Другие вопросы по тегам