gpt4 book ai didi

mysql - 使用 group by 语句对数据集进行排序

转载 作者:行者123 更新时间:2023-11-29 13:52:05 26 4
gpt4 key购买 nike

我正在向数据库写入一个查询,用于跟踪体育比赛的结果。我的数据库有一个运动员表:

| 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

但这导致了内存不足错误。成绩表有超过 100 万条条目,运动员条目有超过 15,000 条。所以问题仍然存在,是否有一种有效的方法对分组记录进行排序,或者我应该让 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 |

<强> SQLFiddle

关于mysql - 使用 group by 语句对数据集进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16534791/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com