基于分类和分支的Mysql排名
我很难找出并尝试如何解决这个问题。 你能帮我提供一个逻辑或想法吗?如何根据销售情况获得每个分支的每个类别的排名?
例如:
与其他分支一样。 我只需要每个branch_code_id
的类别branch_code_id
。
我无法弄清楚如何循环这一个。 您可以在excel输出中看到Rank,它将放在“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
查询order by c.category, a.branch_code_id, SUM(b.amount) DESC