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