我很难弄清楚并尝试解决这个问题。 你能帮我给出一个逻辑或想法如何根据销售额获得每个分支机构的每个类别的排名吗?
例如:
- branch_code_id = 9 的第 1 名是 Accicular,因为它的销售额为 300,000
- branch_code_id = 9 的排名 2 是 WLO,因为它只有 200,000 销售。
与其他分支相同。我只需要每个 branch_code_id
的类别排名。
我不知道如何循环这个。正如您在 excel 输出中看到的那样,排名将放置在“r”列中。
顺便说一下,这是我用来获取您在屏幕截图中看到的结果的 sql 语句。
SELECT
a.id,
a.date,
a.branch_code_id,
SUM(b.amount),
c.category
FROM
sales_add_h AS a
INNER JOIN sales_add_i AS b ON a.id = b.sales_h_id
INNER JOIN control_panel_item_create AS c ON b.item_code_id = c.id
GROUP BY c.category, a.branch_code_id, b.amount
ORDER BY SUM(b.amount) DESC
谢谢大家!
最佳答案
试试这个查询
SELECT
@rn:=if(@prv=branch_code_id, @rn+1, 1) as rId,
@prv:= branch_code_id as branch_code_id,
val,
id,
date,
category
FROM
(SELECT
a.id,
a.date,
a.branch_code_id,
SUM(b.amount) as val,
c.category
FROM
sales_add_h AS a
INNER JOIN
sales_add_i AS b ON a.id = b.sales_h_id
INNER JOIN
control_panel_item_create AS c ON b.item_code_id = c.id
GROUP BY
c.category, a.branch_code_id, b.amount
ORDER BY
a.branch_code_id, SUM(b.amount) DESC)tmp
JOIN
(SELECT @rn:=0, @prv:=0)t
SQLFIDDLE 了解排名的工作原理。
如您所述,我已经对每个 branch_id 进行了排名,如果您想对特定分支中的每个类别进行排名,则需要添加另一个存储类别的变量并在 if clause
中进行比较。并且还需要相应地对内部查询中的数据进行排序 order by c.category, a.branch_code_id, SUM(b.amount) DESC
关于php - Mysql基于类别和分支的排名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16933510/