Mysql 使用GROUPBY语句对数据集进行排序
我正在向一个数据库中写入一个查询,该数据库跟踪体育比赛的结果。我的数据库有一个表:Mysql 使用GROUPBY语句对数据集进行排序,mysql,group-by,Mysql,Group By,我正在向一个数据库中写入一个查询,该数据库跟踪体育比赛的结果。我的数据库有一个表: | id | first_name | last_name | Gender | | 1 | Sam | Johnson | m | | 2 | Adam | Jones | m | 和结果表 | id | time | athlete_id | 1 |
| id | first_name | last_name | Gender |
| 1 | Sam | Johnson | m |
| 2 | Adam | Jones | m |
和结果表
| id | time | athlete_id
| 1 | 1302 | 1
| 2 | 1420 | 1
| 3 | 1491 | 2
| 4 | 1541 | 2
| 5 | 0 | 1
我想找回所有的运动员,只有他们最快的成绩。我有一个这样的问题
select a.id as aid, a.`first`, a.`last`, r.`id` as `rid`, min(r.`time`) as `time`
FROM athletes a, results r
WHERE
r.athlete_id=a.id AND
r.time > 0
GROUP BY a.id
ORDER BY r.time
到目前为止,我的查询确实将结果限制在最快的时间内,但没有按时间正确排序。我还尝试向结果表添加第二个引用
select a.id as aid, a.`first`, a.`last`, r.`id` as `rid`, r.`time`
FROM athletes a, results r, results r2
WHERE
r.athlete_id=a.id AND
r2.athlete_id=a.id AND
r.time > 0
r1.time < r2.time
ORDER BY r.time
选择a.id作为辅助,a.first、a.last、r.id作为rid、r.time`
来自运动员a、结果r、结果r2
哪里
r、 运动员id=a.id和
r2.运动员id=a.id和
r、 时间>0
r1.时间
但这导致了内存不足错误。成绩表上有100多万份参赛作品,运动员参赛作品超过15000份。因此,问题仍然存在,是否有一种有效的方法对分组记录进行排序,或者是否应该让PHP脚本在记录集循环时删除结果。试试看
SELECT q.athlete_id aid, a.first, a.last, r.id rid, q.`time`
FROM
(SELECT athlete_id, MIN(`time`) `time`
FROM results
WHERE time > 0
GROUP BY athlete_id) q JOIN results r
ON q.athlete_id = r.athlete_id
AND q.`time` = r.`time` JOIN athletes a
ON q.q.athlete_id = a.id
ORDER BY q.`time`
输出:
| AID | FIRST | LAST | RID | TIME |
--------------------------------------
| 1 | Sam | Johnson | 1 | 1302 |
| 2 | Adam | Jones | 3 | 1491 |
你是什么意思…它没有按时间正确排序。。。?您能根据您的样本数据提供所需的输出吗?谢谢。我最后做了一些非常类似的事情。