我正试图找出如何根据两个不同的列编号在拉拉,但原始的mysql就行了。我有一个视频列表,这些视频在比赛中,如果有人喜欢视频,就会给他们投票。每个视频将有一个投票号码和一个竞争号码。我正试图根据竞争中的选票进行排名。所以,举个例子,下面我有第8场比赛,我需要所有视频的排名,根据投票结果。然后,我需要同样的竞争5等。
|rank|votes|competition|
------------------
| 1 | 100 | 8 |
------------------
| 2 | 50 | 8 |
------------------
| 3 | 30 | 5 |
------------------
| 1 | 900 | 5 |
------------------
| 2 | 35 | 5 |
------------------我尝试过各种小组和选择的方法,但似乎没有任何效果,有什么想法吗?
发布于 2014-06-03 20:05:36
在Mysql中,您可以使用用户定义的变量来计算级别,case语句检查竞争是否与前一行相同,然后如果不同,则递增一阶,然后为视频分配一个订单,以获得正确的排序。
SELECT t.*,
@current_rank:= CASE WHEN @current_rank = competition
THEN @video_rank:=@video_rank +1
ELSE @video_rank:=1 END video_rank,
@current_rank:=competition
FROM t ,
(SELECT @video_rank:=0,@current_rank:=0) r
ORDER BY competition desc, votes desc见Demo
如果您与最后一个额外列混淆,可以使用一个子选择
见Demo
发布于 2014-06-03 20:02:58
您可以使用窗口函数:
select
competition, votes, rank() over (partition by competition order by votes desc) as rank
from
table1https://stackoverflow.com/questions/24023824
复制相似问题