如何从使用汇总函数分组的多个表中返回多个列

问题描述 投票:1回答:2

我有三个表,如下:

1. Results table (containing performances)
2. Athletes table (containing athlete ids and names)
3. Events table (containing event ids and eventNames)

Results Table (sample)
+----------+-----------+---------+----------+----------+------+------------+-----------+--------+----------+---------+-----------------------+--------+----------------+------------+
| resultID | athleteID | eventID | ageGroup |   time   | wind | distHeight | implement | record | centreID | placing |      competition      | in_out |     venue      |    date    |
+----------+-----------+---------+----------+----------+------+------------+-----------+--------+----------+---------+-----------------------+--------+----------------+------------+
|      203 |    503262 |       1 | MS       | 00010.83 |  5.2 |            |           | D      | AKL      | 3       | IAAF Challenge        | out    | Arles FRA      | 2008-06-07 |
|      201 |    515092 |       1 | MS       | 00011.06 |  3.2 |            |           |        | CAN      | 6h1     | Winter Series #3      | out    | Gold Coast AUS | 2008-06-15 |
|      298 |    503262 |       1 | MS       | 00011.26 | -1.0 |            |           | D      | AKL      | 4       | TNT - Fortuna         | out    | Kladno CZE     | 2008-06-18 |
|      202 |    515092 |       2 | MS       | 00022.69 |  0.6 |            |           |        | CAN      | 4h1     | Winter Series #3      | out    | Gold Coast AUS | 2008-06-15 |
|      380 |    504550 |       2 | MS       | 00022.22 |  0.9 |            |           |        | AKL      | 6rA     | Int. Meeting Nivelles | out    | Nivelles BEL   | 2008-06-28 |
|      381 |    504613 |       2 | MS       | 00021.28 |  0.9 |            |           |        | AKL      | 2rA     | Int. Meeting Nivelles | out    | Nivelles BEL   | 2008-06-28 |
|        3 |    518131 |      33 | MS       |          |      |     077.91 | 800gm     |        | WBP      | 1Q      | Good Luck Beijing     | out    | Beijing CHN    | 2008-05-22 |
|        4 |    518131 |      33 | MS       |          |      |     079.61 | 800gm     |        | WBP      | 1       | Good Luck Beijing     | out    | Beijing CHN    | 2008-05-23 |
|      144 |    518131 |      33 | MS       |          |      |     080.51 | 800gm     |        | WBP      | 1       | Chinese Taipei Int    | out    | Taiwan TPE     | 2008-06-01 |
+----------+-----------+---------+----------+----------+------+------------+-----------+--------+----------+---------+-----------------------+--------+----------------+------------+

Event Table (sample)
+---------+---------------+
| eventID |   eventName   |
+---------+---------------+
|       1 | 100m          |
|       2 | 200m          |
|      33 | Javelin Throw |
+---------+---------------+

Athlete Table (sample)
+-----------+----------+-----------+--------+------------+--------+
| athleteID | nameLast | nameFirst | gender |    DOB     | clubID |
+-----------+----------+-----------+--------+------------+--------+
|    503262 | Lambert  | Ben       | M      | 2003-12-04 |    233 |
|    504613 | Abba     | Eric      | M      | 1991-11-03 |     20 |
|    518131 | Abbiss   | Hugh      | M      | 1992-04-03 |     57 |
+-----------+----------+-----------+--------+------------+--------+

我需要分别加入这些表,以返回每个比赛事件的分钟(时间)和每个跳跃/掷球事件的最大(距离)(来自结果表)以及相应的运动员名称和事件名称。]

我已尝试为MySql 5.7推荐将选择项包括在'GROUP BY'列表中,但最终返回了数千行。

我在MySql 5.7之前的以下查询中正常工作

SELECT events.eventID, events.eventName, results.ageGroup, results.athleteID, MIN(results.time) AS time, MAX(results.distHeight) as distHeight, DATE_FORMAT(results.date, '%d %b %Y') as date, athletes.nameFirst, athletes.nameLast, DATE_FORMAT(athletes.DOB, '%d %b %Y') as format_DOB

FROM (
SELECT * FROM results 
WHERE results.ageGroup = 'MS' 
AND YEAR(results.date) = '2019' 
AND results.wind < 2.1 
AND results.wind != 'nwr' 
ORDER BY results.time ASC, results.distHeight DESC, results.date ASC
) as results

INNER JOIN athletes ON results.athleteID = athletes.athleteID 
INNER JOIN events ON results.eventID = events.eventID 
GROUP BY results.eventID 
ORDER BY events.eventID ASC

我希望以下内容:

Event   | Result  | Athlete Name
100m    | 10.83   | Ben Lambert ...
200m    | 21.28   | Eric Abba ..
Javelin | 80.51m  | Hugh Abbiss ...

非常感谢任何帮助或建议...

我有以下三个表:1.结果表(包含表演)2.运动员表(包含运动员ID和名称)3.事件表(包含事件ID和事件名称)结果表(...

mysql
2个回答
1
投票
您应该将主查询与子查询结合在一起以提高性能

0
投票
也许这是子查询将表绘制在一起并找出与最小或最大匹配的结果
© www.soinside.com 2019 - 2024. All rights reserved.