【问题标题】:how to rank over partition in MySql如何在 MySql 中对分区进行排名
【发布时间】:2018-04-26 10:12:31
【问题描述】:

我是新使用 MySql 数据库,我遇到的问题是如果在 SQL Server 数据库中我可以解决它,但在下面我的情况下我不能在 mysql 中这样做

我的表:

Name    Price
abs     100
abs     200
abs     60
trx     19
trx     20
abs     10
qwe     25
qwe     50
qwe     10
qwe     10

预期结果:

Name    Price   Rank
abs      200    4
abs      100    3
abs      60     2
abs      10     1
qwe      50     4
qwe      25     3
qwe      10     2
qwe      10     1
trx      20     2
trx      19     1

谁能帮助我如何进行索引结果图片之类的查询 用Mysql

【问题讨论】:

  • 尝试谷歌搜索 mysql 排名并选择合适的答案。

标签: mysql window-functions


【解决方案1】:

使用变量可以找到Rank。 像这样:

SELECT Name, Price, Rank
FROM (
      SELECT Name,
             Price,
             CASE WHEN @name = Name
                     THEN @id:=@id+1
                  ELSE @id:=1
             END AS Rank,
             @name:= Name AS dummy
      FROM myTable, (SELECT @name:=NULL, @id:=0) AS t
      ORDER BY Name,Price
     ) AS x
ORDER BY Name, Price DESC, Rank DESC 

输出:

Name    Price   Rank
---------------------
abs      200    4
abs      100    3
abs      60     2
abs      10     1
qwe      50     4
qwe      25     3
qwe      10     2
qwe      10     1
trx      20     2
trx      19     1

演示链接:

http://sqlfiddle.com/#!9/a98575/4

【讨论】:

  • 太糟糕了 MySQL 不支持视图中的变量。我可以切换到 rank() 函数,但直到 MySQL 8 才可用。(我有 MySQL 5)
猜你喜欢
  • 2010-10-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多