基于分类和分支的Mysql排名

我很难找出并尝试如何解决这个问题。 你能帮我提供一个逻辑或想法吗?如何根据销售情况获得每个分支的每个类别的排名?

在这里输入图像描述

在这里输入图像描述

例如:

  • branch_code_id = 9的等级1是Accicular,因为它有30万个销售额
  • branch_code_id = 9的等级2是WLO,因为它只有20万个销售额。
  • 与其他分支一样。 我只需要每个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

    链接地址: http://www.djcxy.com/p/71753.html

    上一篇: Mysql Ranking based on Category and Branch

    下一篇: RANDOM considered dangerous?