Во-первых, агрегатные функции, такие как MIN (), MAX, AVG (), COUNT (), SUM (), все будут использовать группу, если есть еще один столбец, такой как ваш пример ... знать, на каком разрыве рассматривать каждую группу ... (за исключением чего-то вроде SELECT MAX (Balance) из CustomerAccount - где это получает максимальный баланс независимо от того, кто или что).
Что вам нужно сделать, это предварительно запросить ваше условие и затем получить элементы, связанные с этим классификатором.
SELECT
id_type,
max( views )
from
videos
group by
id_type
Теперь, это дает мне внутреннюю предквалификацию ... для каждого типа видео, что было максимальным независимо от ID. Теперь, если есть проблемы с несколькими видео с одинаковым количеством, я также собираюсь использовать квалификатор MIN () для идентификатора в запросе второго уровня.
select
PreQuery.id_type,
min( v.ID ) as FirstVideoIDByType
from
( SELECT
id_type,
max( views )
from
videos
group by
id_type ) PreQuery,
Videos v
where
PreQuery.id_type = v.id_type
group by
PreQuery.id_type
Наконец, у меня теперь будет первый экземпляр идентификатора с максимальным количеством просмотров для каждого типа видео, теперь я получу подробности для этих конкретных видео
select
FinalVideo.*
from
( select
PreQuery.id_type,
min( v.ID ) as FirstVideoIDByType
from
( SELECT
id_type,
max( views )
from
videos
group by
id_type ) PreQuery,
Videos v
where
PreQuery.id_type = v.id_type
group by
PreQuery.id_type ) PreQuery2,
Videos v2
where
PreQuery2.FirstVideoIDByType = v2.id
order by
v2.id_type
limit
0, 20;
Надеюсь, это прояснит, как и почему вещи работают так, как они ... Иногда сложно сломать элементы, чтобы получить то, что вы действительно хотите.
Если вы хотите включить все видео, которые могут быть привязаны к одному и тому же максимальному количеству просмотров, вы можете пропустить дополнительный запрос, но присоединиться к нему с тем же максимальным количеством просмотров через
select
FinalVideo.*
from
( SELECT
id_type,
max( views ) MaxViews
from
videos
group by
id_type ) PreQuery,
Videos v
where
PreQuery.id_type = v.id_type
and PreQuery.MaxViews = v.views
order by
v.id_type
limit
0, 20;