I have 3 tables:
CREATE TABLE IF NOT EXISTS sportsman (
    sportsman_id int NOT NULL AUTO_INCREMENT,
    sportsman_name varchar(255) NOT NULL,
    PRIMARY KEY (sportsman_id)
);
CREATE TABLE IF NOT EXISTS competition (
    competition_id int NOT NULL AUTO_INCREMENT,
    competition_name varchar(255) NOT NULL,
    PRIMARY KEY (competition_id)
);
CREATE TABLE IF NOT EXISTS results (
    competition_id int,
    sportsman_id int,
    result float,
    FOREIGN KEY (sportsman_id) REFERENCES sportsman(sportsman_id),
    FOREIGN KEY (competition_id) REFERENCES competition(competition_id)
);
Here is the sample data:
INSERT INTO `sportsman` (`sportsman_name`) VALUES ('sportsman1');
INSERT INTO `sportsman` (`sportsman_name`) VALUES ('sportsman2');
INSERT INTO `competition` (`competition_name`) VALUES ('competition1');
INSERT INTO `competition` (`competition_name`) VALUES ('competition2');
INSERT INTO `results` (`competition_id`, `sportsman_id`, `result`) VALUES ('1', '1', '20');
INSERT INTO `results` (`competition_id`, `sportsman_id`, `result`) VALUES ('1', '2', '25');
INSERT INTO `results` (`competition_id`, `sportsman_id`, `result`) VALUES ('2', '1', '18');
INSERT INTO `results` (`competition_id`, `sportsman_id`, `result`) VALUES ('2', '2', '23');
I need to get competition_name, max result, sportsman_name.
My query is:
SELECT 
    c.`competition_name`, 
    MAX(r.`result`), 
    s.`sportsman_name`
FROM `competition` c
INNER JOIN `results` r ON c.`competition_id` = r.`competition_id`
INNER JOIN `sportsman` s ON s.`sportsman_id` = r.`sportsman_id` 
GROUP BY c.`competition_name`;
It groups by competition_name, it finds max result. But it picks first sportsman_name.
Any suggestions?
 
     
    