Значение Max () из подзапроса с SUM () и несколькими строками - PullRequest
0 голосов
/ 17 марта 2020

Я пытаюсь написать запрос mysql, который отображает максимальное значение подзапроса, но я этого не делаю. У меня есть этот основной запрос, который отлично работает. Этот запрос выбирает общее количество очков, набранное каждой командой за конкретную игру c:

SELECT team_id, SUM(points) as totalpointsscored, game_id 
FROM BOXSCORES 
WHERE season="1920" and categorie=2 
GROUP BY team_id, game_id

Вывод выглядит так:

team_id | value (points scored) | game_id
    ASM |                    98 | 9117338
    ASM |                   104 | 9117335
    ASM |                    75 | 9117324
    LEM |                   128 | 9117380
    LEM |                    97 | 9117316
    STR |                    95 | 9117334
    STR |                   102 | 9117177
    STR |                    88 | 9117469

Я бы хотел выбрать максимальное значение чтобы каждая команда знала, в какой игре команда набрала больше всего очков. Таким образом, вывод будет:

ASM | 104 | 9117335
LEM | 128 | 9117380
STR | 102 | 9117177

Я пытаюсь с группой по и имея, но это не работает. team_id & value в порядке, но game_id всегда является первой строкой, а не game_id, прикрепленным к значению. Не могли бы вы помочь мне найти лучшее решение?

Ответы [ 2 ]

0 голосов
/ 17 марта 2020

Я исправил это.

Я просто добавляю сезон и категорию ie в первом запросе так:

select 
    team_id, 
    sum(points) as total_points_scored, 
    game_id, season, categorie
from BOXSCORES b
where season= '1920' and categorie = 2 
group by team_id, game_id
having sum(points) = (
    select sum(points) 
    from BOXSCORES b1
    where b1.season= b.season and b1.categorie = b.categorie and b1.team_id= b.team_id
    group by game_id
    order by sum(points) desc
    limit 1
)
0 голосов
/ 17 марта 2020

В MySQL 8.0 вы можете использовать оконные функции:

select *
from (
    select 
        team_id, 
        sum(points) as total_points_scored, 
        game_id,
        rank() over(partition by team_id order by sum(points) desc) rn
    from boxscores
    where season = '1920' and categorie = 2 
    group by team_id, game_id
) t
where rn = 1

В более ранних версиях одним из решений является:

select 
    team_id, 
    sum(points) as total_points_scored, 
    game_id
from boxscores b
where season = '1920' and categorie = 2 
group by team_id, game_id
having sum(points) = (
    select sum(points) 
    from boxscore b1
    where b1.season = b.season and b1.categorie = b.categorie and b1.team_id = b.team_id
    group by game_id
    order by sum(points) desc
    limit 1
)
...