7

我很难弄清楚并尝试如何解决这个问题。您能否帮我提供一个逻辑或想法,如何根据销售额获得每个分支的每个类别的排名?

在此处输入图像描述

在此处输入图像描述

例如:

  • 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

多谢你们!

4

1 回答 1

4

试试这个查询

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

于 2013-06-05T07:36:59.250 回答