Php 基于类别和分支的Mysql排名
我很难想出并尝试如何解决这个问题。 你能帮我给出一个逻辑或想法吗?如何根据销售额获得每个分支机构的每个类别的排名 例如:Php 基于类别和分支的Mysql排名,php,mysql,Php,Mysql,我很难想出并尝试如何解决这个问题。 你能帮我给出一个逻辑或想法吗?如何根据销售额获得每个分支机构的每个类别的排名 例如: 分支机构代码id=9的排名1是正确的,因为它的销售额为300000 分支代码id=9的排名2是WLO,因为它只有200000 销售 与其他分支相同。我只需要每个分支\u code\u id的类别排名 我不知道如何循环这个。排名将被放置在“r”列中,正如您在excel输出中看到的那样 顺便说一下,这是我用来获取屏幕截图中显示的结果的sql语句 SELECT a
- 分支机构代码id=9的排名1是正确的,因为它的销售额为300000
- 分支代码id=9的排名2是WLO,因为它只有200000 销售
分支\u code\u id
的类别排名
我不知道如何循环这个。排名将被放置在“r”列中,正如您在excel输出中看到的那样
顺便说一下,这是我用来获取屏幕截图中显示的结果的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
了解排名的工作原理
正如您所提到的,我已经对每个分支id进行了排序,如果您想对特定分支中的每个类别进行排序,那么您需要添加另一个变量来存储该类别,并在
if子句中对其进行比较,还需要对内部查询中的数据进行相应的排序按c.category排序,a.branch\u code\u id,SUM(b.amount)DESC
您能提供场景的示例数据库吗?我上传了excel文件。(预期输出)为什么你要按b.amount
分组,如果你SUM
的话?为什么branchcode\u id no.10没有排在第二位,因为它有40000个销售额?Yassi我的意思是说,你能提供一个像这样的演示数据库吗?这样我们就可以浏览场景了。这很好:)谢谢你!我最后关心的是,当我添加WHERE a.branch_code_id=11和c.category=“WLO”时,它会将秩设置为1,其中秩应为2。当您添加WHERE条件时,它会过滤所有具有给定条件的记录,并且只对过滤后的记录进行秩。检查您期望排名为1的记录是否满足where子句中给出的条件。谢谢您,先生!我所做的是做一个循环,从一个特定的分支得到所有秩1。你的代码帮了我很多,让我很开心:)非常感谢