gpt4 book ai didi

mysql - 如何获得 mysql 排名中关系的正确位置

转载 作者:行者123 更新时间:2023-11-30 00:12:08 25 4
gpt4 key购买 nike

这是我的代码,适用于领带,但它不会跳过领带上的位置

SELECT   `item`, (`totalrate` / `nrrates`),
@rank_count := @rank_count + (totalrate/nrrates < @prev_value) rank,
@prev_value := totalrate/nrrates avg
FROM table, (SELECT @prev_value := NULL, @rank_count := 1) init
ORDER BY avg DESC

这是我得到的结果

item        (`totalrate` / `nrrates`)    rank     avg

Virginia 10.0000 1 10
Ana 9.7500 2 9.75
Angeie 9.72 3 9.72
Carel 9.666666666 4 9.66
sammy 9.666666666 4 9.66
Oda 9.500000000 5 9.5

我要

item        (`totalrate` / `nrrates`)    rank     avg

Virginia 10.0000 1 10
Ana 9.7500 2 9.75
Angeie 9.72 3 9.72
Carel 9.666666666 4 9.66
sammy 9.666666666 4 9.66
Oda 9.500000000 6 9.5

跳过第 5 个位置

我想与此合并,以跳过领带上的位置

(我从这篇文章中获取了以下代码 MySQL Rank in the Case of Ties )

SELECT t1.name, (SELECT COUNT(*) FROM table_1 t2 WHERE t2.score > t1.score) +1
AS rnk
FROM table_1 t1

我将如何修改我的代码以使其跳过上述代码的位置,它看起来很简单,但我还没有弄清楚。谢谢

最佳答案

在平局时,您可能希望跳过并使用当前行号到下一个不匹配的平均值行作为下一个排名。
以下内容应该对您有帮助

SELECT   `item`, @curr_avg := ( `totalrate` / `nrrates` )
, case when @prev_avg = @curr_avg then @rank := @rank
else @rank := ( @cur_row + 1 )
end as rank
, @cur_row := ( @cur_row + 1 ) as cur_row
, @prev_value := @curr_avg avg
FROM table
, ( SELECT @prev_avg := 0, @curr_avg := 0
, @rank := 0, @cur_row := 0 ) init
ORDER BY avg DESC

类似示例:

关于mysql - 如何获得 mysql 排名中关系的正确位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23960889/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com