mysql测验排行榜按点过滤,所用时间

时间:2015-05-26 22:54:50

标签: mysql sql select sql-order-by grouping

我有一个测验报告表,显示用户所进行的每个测验的报告。我需要创建一个排行榜,显示最高用户最高分,按积分过滤,然后时间

这是一个指向sql fiddle http://sqlfiddle.com/#!2/65fbf0/1

的链接

我真的很挣扎,因为我需要为一个用户按两列过滤结果,我理想的结果是

Results for Quiz id 1
---------------------------------------------------------------   
| user_id  |  points  |  time_spend  |  start_dt  |  quiz_id  |
| 1        |  3       | 0.5          | May,15 2015|  1        |
| 2        |  3       | 0.8          | May,15 2015|  1        |
| 3        |  2       | 0.5          | May,15 2015|  1        |

然后单独查询所有测验,显示上周的结果

Results from all Quizzs
---------------------------------------------------------------   
| user_id  |  points  |  time_spend  |  start_dt  |  quiz_id  |
| 1        |  3       | 0.5          | May,15 2015|  1        |
| 2        |  3       | 0.8          | May,13 2015|  3        |
| 3        |  2       | 0.5          | May,12 2015|  2        |

1 个答案:

答案 0 :(得分:1)

您可以对多个列进行排序,如下所示:

select *
from QuizReport
where quiz_id = 1
order by points desc, time_spend asc;

select *
from (
  select *
  from QuizReport
  where start_dt >= subdate(curdate(), 7)
  order by points desc, time_spend asc) a
group by user_id;

group_by user_id保留每个user_id的第一行。由于内部查询按分数对行进行排序,因此外部查询将为每个用户显示最佳行。