基本上我试图通过公司对所有季度的值进行求和,并在一个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
我做错了什么?
答案 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