Как вывести столбец без группы по SQL - PullRequest
0 голосов
/ 28 апреля 2020

Таким образом, в SQL у меня есть таблица исполнителей, которая имеет (artist_id, artist_name, artist_hotness, artist_familiarity) У меня также есть таблица композиций, которая имеет (song_id, song_name, album_id, artist_id).

I Я пытаюсь перечислить каждого исполнителя и их самую длинную песню, вместе с названием песни. В настоящее время у меня есть

select artist_name, song_title, max(duration) as length
from artists natural inner join songs
group by artist_name, song_title;

, но здесь, очевидно, перечислены все песни этого исполнителя и их продолжительность. Тем не менее, я не могу не группировать по song_title, потому что он находится в предложении select и не является агрегатной функцией.

В MySQL Я попытался выполнить вышеупомянутый запрос, но только группировку по artist_name, но затем результат показывает правильную продолжительность, но НЕ правильный заголовок песни.

1 Ответ

1 голос
/ 28 апреля 2020

Попробуйте следующее, используя оконную функцию row_number(). В любом случае у исполнителя есть более одной песни с одинаковой продолжительностью, затем просто переключите row_number() с dense_rank().

select
    artist_name, 
    song_title, 
    duration
from
(
    select 
        artist_name, 
        song_title, 
        duration as length,
        row_number() over (partition by artist_name order by duration desc) as rnk
    from artists 
    natural inner join songs
)
where rnk = 1 ;
...