php - Mysql基于类别和分支的排名

标签 php mysql

我很难弄清楚并尝试解决这个问题。 你能帮我给出一个逻辑或想法如何根据销售额获得每个分支机构的每个类别的排名吗?

enter image description here

enter image description here

例如:

  • 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

谢谢大家!

最佳答案

试试这个查询

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

关于php - Mysql基于类别和分支的排名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16933510/

相关文章:

MYSQL,创建 View 并从两个表中提取信息

javascript - 使用带有添加变量的 Javascript 提交表单

php - 搜索引擎友好的 URL

php - 加入两个表,然后按日期排序,但合并两个表

php - PHP/HTML Web 应用程序中的全局计数器变量

mysql - Mysql命令不起作用

php - mysql_fetch_array()/mysql_fetch_assoc()/mysql_fetch_row()/mysql_num_rows 等...期望参数 1 是资源

php - 如何使用内连接获取值

PHP/IOS : what is best way to encode json for web service?

php - 如何使用json格式返回mysql中插入的行?