我有一个报告表,每天汇总每个产品数量的数据。
SELECT r.year, r.month, c.id, c.client_name, p.product_name, cc.country_name, sum(r.quantity) units FROM
client c
join report r on c.id = r.client_id
join product p on r.product_id = p.id
join country cc on r.country_id = c.id
WHERE r.year = year(now())
group by r.year, r.month, c.id, p.product_name, cc.country_name
我试图弄清楚组单位如何按月、客户、产品和国家/地区求和,其中查询显示前 5 个国家/地区的总和,其余是底部国家/地区的总和。像这样:
case
when sum(r.quantity) = 'Top 1' then cc.country_name
when sum(r.quantity) = Top 2' then cc.country_name
.....
when sum(r.quantity) = 'Top 2' then cc.country_name
else 'Other'
我该怎么做?
提前致谢
最佳答案
你可以试试这个。在这里,我将结果从最多到更少排序并添加行号。所以前 6 个是顶部。
请尝试一下,但我无法测试。
SELECT
@nr := ( @nr +1) AS nr,
IF ( @nr < 7, CONCAT('Top ',@nr), 'other' ) AS top,
r.* FROM (
SELECT r.year, r.month, c.id, c.client_name, p.product_name, cc.country_name, sum(r.quantity) units
FROM CLIENT c
JOIN report r ON c.id = r.client_id
JOIN product p ON r.product_id = p.id
JOIN country cc ON r.country_id = c.id
WHERE r.year = YEAR(now())
GROUP BY r.year, r.month, c.id, p.product_name, cc.country_name
ORDER BY sum(r.quantity) DESC
) AS r
CROSS JOIN ( SELECT @nr:=0 ) AS params;
关于MySQL - 如何对前 6 名和其余的总和进行分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37881268/