简体   繁体   中英

MySQL Subquery Group By

I have a query that displays a list of race results based on a person's id (athleteid). I have queried the database so that it lists the person's races in order of time (performance) and event (eventid) but I'm struggling to set this up as a subquery so that I can group the results afterwards to leave me with the fastest performance for each eventid. This is what I have so far:

$id = $_GET['id'];
$query = sprintf("SELECT events.eventcode, meetings.meetingid, meetings.meetingname, meetings.location, meetings.meetingdate, DATE_FORMAT(meetings.meetingdate,'%%d %%b %%Y') AS date, results.performance, results.unit, results.wind, agegroups.agegroup
FROM results 
JOIN athletes ON athletes.athleteid = results.athleteid
JOIN meetings ON meetings.meetingid = results.meetingid
JOIN events ON events.eventid = results.eventid
JOIN agegroups ON agegroups.agegroupid = results.agegroupid
WHERE results.athleteid='$id' AND events.eventtype = 'track' ORDER BY results.eventid asc, results.performance asc, meetings.meetingdate desc");

This works fine and displays all the relevant entries in the correct order. I then tried to turn it in to a subquery so that I could then use GROUP BY, but with no success. This is where I was trying to go with it:

$id = $_GET['id'];
$query = sprintf("SELECT * FROM (SELECT events.eventcode, meetings.meetingid, meetings.meetingname, meetings.location, meetings.meetingdate, DATE_FORMAT(meetings.meetingdate,'%%d %%b %%Y') AS date, results.performance, results.unit, results.wind, agegroups.agegroup
FROM results 
JOIN athletes ON athletes.athleteid = results.athleteid
JOIN meetings ON meetings.meetingid = results.meetingid
JOIN events ON events.eventid = results.eventid
JOIN agegroups ON agegroups.agegroupid = results.agegroupid
WHERE results.athleteid='$id' AND events.eventtype = 'track' ORDER BY results.eventid asc, results.performance asc, meetings.meetingdate desc) AS t1
GROUP BY t1.eventid");

However, this gives me an error which states: Unknown column 't1.eventid' in 'group statement'

Any help is greatly appreciated

You have not selected the eventid in you subquery. How can you then group by if it is not there?.

SELECT events.eventid,events.eventcode, 
meetings.meetingid, meetings.meetingname, 
meetings.location, meetings.meetingdate, 
DATE_FORMAT(meetings.meetingdate,'%%d %%b %%Y') AS date, 
results.performance, results.unit, results.wind, 
agegroups.agegroup
.......

that's cause you don't have that column on the sub-query, try adding the column on the sub-select:

$id = $_GET['id'];
$query = sprintf("SELECT * FROM (SELECT events.eventid, events.eventcode, meetings.meetingid, meetings.meetingname, meetings.location, meetings.meetingdate, DATE_FORMAT(meetings.meetingdate,'%%d %%b %%Y') AS date, results.performance, results.unit, results.wind, agegroups.agegroup
FROM results 
JOIN athletes ON athletes.athleteid = results.athleteid
JOIN meetings ON meetings.meetingid = results.meetingid
JOIN events ON events.eventid = results.eventid
JOIN agegroups ON agegroups.agegroupid = results.agegroupid
WHERE results.athleteid='$id' AND events.eventtype = 'track' ORDER BY results.eventid asc, results.performance asc, meetings.meetingdate desc) AS t1
GROUP BY t1.eventid");

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM