php - mysql按列值排序按列值分组

标签 php mysql sql laravel eloquent

我正在尝试弄清楚如何根据 laravel 中的 2 个不同列号进行排名,但原始 mysql 可以。我有一个视频列表,这些视频在比赛中,如果有人喜欢这些视频,他们就会投票。每个视频都会有一个投票编号和一个竞赛编号。我正在尝试根据比赛中的投票进行排名。因此,例如下面我有第 8 场比赛,我需要根据投票对比赛中所有视频的排名。然后我需要相同的比赛 5 等。

  |rank|votes|competition|
  ------------------
  |  1 | 100 | 8   |
  ------------------
  |  2 |  50 | 8   |
  ------------------
  |  3 |  30 | 5   |
  ------------------
  |  1 | 900 | 5   |
  ------------------
  |  2 |  35 | 5   |
  ------------------

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

最佳答案

在 Mysql 中,您可以使用用户定义的变量来计算排名,case 语句检查竞争是否与前一行相同,如果不同则将排名递增 1,然后分配 1 需要一个顺序才能使视频具有正确的排名

 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

See Demo

如果您对最后一个额外的列感到困惑,您可以使用子选择

See Demo

关于php - mysql按列值排序按列值分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24023824/

相关文章:

php - 使用冒号分隔符查找逗号分隔值

sql - 如何在 T-SQL 中查找第一次出现的字符序列之一

sql - 甲骨文 : min max values within a repeating group

SQL将原始数据转换为汇总表?

php - MYSQL查询选择列字符串日期与格式化当前日期的日期进行比较

javascript - Swiper-slide 垂直显示而不是水平显示

php - 按数字键和字符串键对数组进行排序

mysql - 如何使订单仅适用于非空记录但获取所有记录?

mysql - 亚马逊 RDS - max_connections

mysql - 获取列名