Распределение максимальной цены по заголовкам с названием заголовка?

У меня есть база данных для упражнений. Я хотел бы перечислить максимальную цену различных типов с соответствующим названием заголовка, но, конечно, я не могу просто вставить атрибут названия заголовка в мое предложение SELECT, потому что оно не появляется в предложении GROUP BY. Есть ли решение моей проблемы? Спасибо!

SELECT type, MAX(price) "price"
FROM titles
GROUP BY type
ORDER BY type DESC;

1 ответ

Решение

Вы не упоминаете базу данных, которую используете. Большинство баз данных поддерживают стандарт ANSI row_number() и оконные / аналитические функции. Вот один из способов сделать то, что вы хотите:

select type, name, price
from (select t.*, row_number() over (partition by type order by price desc) as seqnum
      from titles t
     ) t
where seqnum = 1;

В случае MySQL, который не поддерживает row_number(), ты можешь сделать:

select type,
       substring_index(group_concat(name separator '|' order by price desc), '|', 1) as title,
       max(price) as price
from titles
group by type;

Обратите внимание, что это предполагает, что ни один заголовок не содержит символ '|',

Другие вопросы по тегам