我有一个测验报告表,显示用户所进行的每个测验的报告。我需要创建一个排行榜,显示最高用户最高分,按积分过滤,然后时间。
这是一个指向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 |
答案 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的第一行。由于内部查询按分数对行进行排序,因此外部查询将为每个用户显示最佳行。