@apptimeru

Как составить запрос, чтобы при группировки отбиралась наибольшее значение?

Привет всем. Уже сутки бьюсь над казалось бы простым запросом, но чета не идет.

Сам запрос:
SELECT meta.meta_value, game.title FROM meta
INNER JOIN game ON game.id = meta.id_game
WHERE  game.month = 2 AND game.year = 2016 AND meta.meta_key = 'video' 
GROUP BY meta.id_games 
ORDER BY game.score + game.like DESC LIMIT 10


Примерный вид таблиц

game                meta

id                  id
title               id_games
month               meta_key
year                meta_value
score
like


Если делать без групировки то получаем следующее:

Суть в чем, у любой игры может быть несколько видео в таблице meta с meta_key (video) нужно вытащить видео популярных игр для этого идет сортировка по полям score и like таблицы game, но всего по одному видео из каждой игры.

Данный запрос работает хорошо, но есть проблема, при группировке он берет первые попавшиеся видео с наименьшим meta.id, что логично, а нужно чтобы в результат попадало последнее добавленное видео т.е. максимальным meta.id

Если делать запрос без группировки то видно, что выбираются все видео одной игры, а нужно отобрать только последнее видео каждой игры

LW3t1Z8zEi0MmPVaFjLIQ.png

Надеюсь получилось объяснить)
  • Вопрос задан
  • 152 просмотра
Решения вопроса 1
SELECT MAX(meta.meta_value), game.title
FROM meta
INNER JOIN base ON game.id = meta.id_game
WHERE  game.month = 2 AND game.year = 2016 AND meta.meta_key = 'video' 
GROUP BY meta.id_games 
ORDER BY game.score DESC, game.like DESC
LIMIT 10
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@res2001
Developer, ex-admin
Как-то так:
select meta.meta_value, game.title
from game
join (SELECT game.id as id_games, max(meta.id) as id_meta
FROM meta
JOIN game ON game.id = meta.id_game and game.month = 2 AND game.year = 2016
WHERE meta.meta_key = 'video' 
GROUP BY game.id 
ORDER BY game.score + game.like DESC LIMIT 10) A on A.id_games=game.id
join meta on meta.id=A.id_meta
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы