SQL Школа Домашнее задание, напишите ВЫБОР, который возвращает - PullRequest
2 голосов
/ 07 февраля 2020

Напишите SELECT, который возвращает название пятого альбома для каждой группы. Если у группы нет пятого альбома, там ничего не должно быть. Если у группы будет больше альбомов за год, примените аранжировку лексикографа c по названию альбома. Результат должен включать название группы и название альбома, ранжированные лексикографически в соответствии с названием группы в порядке возрастания (от A до Z).

DATA MODEL FOR THE TASK

Мое решение неверно, потому что я не смог заполнить пятый альбом значением NULL.

SELECT brand_name, album_name
FROM (
    SELECT b.name AS brand_name, a.name AS album_name,
        ROW_NUMBER() OVER(PARTITION BY b.name ORDER BY a.release_year) AS rank
    FROM bands AS b
    JOIN albums AS a ON a.band_id = b.id
  ) tmp
WHERE rank = 5

Мой результат: My result Правильный результат: Correct result

1 Ответ

2 голосов
/ 07 февраля 2020

Вы должны ранжировать альбомы в подзапросе, затем left join во внешнем запросе:

SELECT b.name brand_name, a.name album_name
FROM bands b
LEFT JOIN (
    SELECT 
        band_id, 
        name,
        ROW_NUMBER() OVER(PARTITION BY band_id ORDER BY release_year) AS rn
    FROM albums
) a ON a.band_id = b.id AND a.rn = 5
...