如何在 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 中对分区进行排名的主要内容,如果未能解决你的问题,请参考以下文章
如何在 SQL Server 中按日期列排序的组中对列进行排名