首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >mysql逐列值按列值分组

mysql逐列值按列值分组
EN

Stack Overflow用户
提问于 2014-06-03 19:55:35
回答 2查看 1.1K关注 0票数 1

我正试图找出如何根据两个不同的列编号在拉拉,但原始的mysql就行了。我有一个视频列表,这些视频在比赛中,如果有人喜欢视频,就会给他们投票。每个视频将有一个投票号码和一个竞争号码。我正试图根据竞争中的选票进行排名。所以,举个例子,下面我有第8场比赛,我需要所有视频的排名,根据投票结果。然后,我需要同样的竞争5等。

代码语言:javascript
复制
  |rank|votes|competition|
  ------------------
  |  1 | 100 | 8   |
  ------------------
  |  2 |  50 | 8   |
  ------------------
  |  3 |  30 | 5   |
  ------------------
  |  1 | 900 | 5   |
  ------------------
  |  2 |  35 | 5   |
  ------------------

我尝试过各种小组和选择的方法,但似乎没有任何效果,有什么想法吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-06-03 20:05:36

在Mysql中,您可以使用用户定义的变量来计算级别,case语句检查竞争是否与前一行相同,然后如果不同,则递增一阶,然后为视频分配一个订单,以获得正确的排序。

代码语言:javascript
复制
 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

票数 2
EN

Stack Overflow用户

发布于 2014-06-03 20:02:58

您可以使用窗口函数:

代码语言:javascript
复制
select
    competition, votes, rank() over (partition by competition order by votes desc) as rank
from
    table1
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24023824

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档