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。你的代码帮了我很多,让我很开心:)非常感谢