如何在 MySql 中对分区进行排名

Posted

技术标签:

【中文标题】如何在 MySql 中对分区进行排名【英文标题】:how to rank over partition in 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 排名并选择合适的答案。 【参考方案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)

以上是关于如何在 MySql 中对分区进行排名的主要内容,如果未能解决你的问题,请参考以下文章

如何在sqlite中对表中的行进行排名?

如何在 SQL Server 中按日期列排序的组中对列进行排名

如何在 SnappyData 中对列表中的数据进行分区?

如何在 Spark 中对 DataFrame 进行分区和写入而不删除没有新数据的分区?

在 MySQL 中对数据库表进行分区

如何在 SQL Redshift 中对表进行分区后比较两列的值