简体   繁体   中英

MS Access: Finding the top of each group in an SQL query

In my table, I have four columns.

I have a player name, an ID, an age, and a score.

ID | Player Name | Age | Score
------------------------------
0  | James       | 24  | 20
1  | Carly       | 24  | 25
2  | Matt        | 24  | 19
3  | Jess        | 26  | 35
4  | Jimmy       | 26  | 32
5  | Tom         | 27  | 19
6  | Brian       | 27  | 25

I need to write a query to find the top player of each age group, but I am stumped. I've tried sorting both and using the Max() function, and I have tried manually looping through the values to find the top, but with no avail.

This is the sort of result I'd expect:

ID | Player Name | Age | Score
------------------------------
1  | Carly       | 24  | 25
3  | Jess        | 26  | 35
6  | Brian       | 27  | 25

I am quite confused, and I'm sure there's a simple way to achieve this. Thanks.

One way to solve this is to create an inline view of the max scores per age and then join to it

SELECT p.* 
FROM   players p 
       INNER JOIN (SELECT age, 
                          Max(score) as mScore 
                   FROM   players 
                   GROUP  BY age) AS mp 
               ON p.age = mp.age 
                  AND p.score = mp.mscore 

You should note that if there is tie for max more than one record can appear per age

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