Mysql top5和sum剩余为其他人

时间:2014-10-09 09:29:50

标签: mysql

基本上我试图通过公司对所有季度的值进行求和,并在一个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';

我的桌子是

Country name    q1_2014 q2_2014 q3_2014 q4_2014
Russia  CompanyA    6   6   6   6
Russia  CompanyB    5   5   5   5
Russia  CompanyC    4   4   4   4
Russia  CompanyD    3   3   3   3
Russia  CompanyE    2   2   2   2
Russia  CompanyF    1   1   1   1
Russia  CompanyG    1   1   1   1
Russia  CompanyH    1   1   1   1
Russia  CompanyI    1   1   1   1
Russia  CompanyJ    1   1   1   1
Russia  CompanyK    1   1   1   1

预期结果应该是一个公司的总和,该公司被分组为前5名的年度总和,其余的是其他组合的总和。

CompanyA    24
CompanyB    20
CompanyC    16
CompanyD    12
CompanyE    8
Others  24

我做错了什么?

1 个答案:

答案 0 :(得分: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