mySQL 将关系排序为下一个更高的数字

标签 mysql

Rank with Ties 正常工作,除了第一个记录总是丢失,无论它是如何获取的。试图对从低到高进行排名。

SELECT x.*, 
COUNT(*) AS myRank 
FROM myTablename x 
JOIN myTablename y 
ON x.number > y.number 
GROUP BY id  
ORDER BY myRank 

很高兴地说,经过长时间的努力,以下修订按预期工作!

SELECT x.*, 
Count(y.id)+1 AS myRank
FROM myTablename x 
LEFT JOIN myTablename y 
ON (x.number > y.number) 
GROUP BY x.id 
ORDER BY myRank

结果:

ID  #   Rank
A  -50  1
B  -40  2
C  -40  2
D  -30  4
E  -30  4

将“=”添加到...ON x.number >= y.number ...获得并列排名,除了并列记录排名到下一个更高的数字。

ID  #   Rank
A  -50  1
B  -40  3
C  -40  3
D  -30  5
E  -30  5

Ranking High-to-low with ON x.number <= y.number 做同样的事情。

最佳答案

这是一个没有自连接但使用变量的版本。它很可能也更快:

select id, points, rank from (
select
t.*,
@rownum := @rownum + 1,
@rank := if(@prev_points = points, @rank, @rownum) as rank,
@prev_points := points
from
test t,
(select @rank:=0, @rownum:=0, @prev_points) var_init
order by points desc
)sq

关于mySQL 将关系排序为下一个更高的数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23202239/

相关文章:

php - 是否可以检测视口(viewport)宽度并在 jquery 中写入 mysql,然后在不重新加载页面的情况下在 php 中检索宽度

php - 在不提交表单的情况下获取选择框的值

php - Laravel 5 使用关系查询导致 "Call to a member function addEagerConstraints() on null"错误

mysql - 编写 SQL 查询以根据另一个表中的值获取所有记录(不是连接情况)

mysql - MySQL中有 'insert if not exists'的通用方法吗?

mysql - 动态字段(求和情况)

php - MySQL警告: Cannot set query

php - 奇怪的 Codeigniter 查询转义

java - jpql 根据另一个表中的某些属性从表中选择对象?

mysql - 如何将关联子查询与外表连接起来?