У меня есть два CSV-файла, один касающийся исполнителей, а другой - песен Billboard 100, которые выглядят следующим образом:

Художник (первые 4 строки)

enter image description here

Рекламный щит (первая строка)

enter image description here

Теперь мне нужно написать SQL-запрос, чтобы напечатать каждого исполнителя вместе с количеством альбомов, которые они выпустили, и количеством песен Billboard100, которые у них есть, что требует, чтобы я присоединился к двум таблицам. Моя схема для двух таблиц выглядит так:

CREATE TABLE Artist(Artist_ID int not null primary key, 
                    Artist varchar(30), Followers int, 
                    Genres varchar(200), NumAlbums int, 
                    YearFirstAlbum int, Gender char(1), 
                    Group_Solo varchar(5) ); 

CREATE TABLE Billboard(Song_ID int not null primary key, 
                    Artists varchar(90), Name varchar(20), 
                    Weekly_rank int, Peak_position int, 
                    Weeks_on_chart int, Week Date, Date varchar(20),     
                    Genre varchar(20), Writing_Credits varchar(20), 
                    Lyrics varchar(10), Features varchar(20) );

И это результат для первых нескольких строк, когда я вставлял файлы csv:

enter image description here

Теперь вы знаете, как лучше всего запросить печать каждого исполнителя вместе с количеством выпущенных ими альбомов и количеством песен Billboard100, которые у них есть в файле, учитывая, что я не вставлял внешний ключ в таблицу billboard? Или мне надо пересмотреть схему?

Заранее спасибо!

0
SosaAlmighty 18 Мар 2021 в 02:04

1 ответ

Лучший ответ

Я бы порекомендовал удалить исполнителя из Billboard и создать новую таблицу для хранения исполнителей и их песен (особенно с учетом того, что исполнитель может быть как соло, так и в группе). Не рекомендуется иметь несколько значений в одном столбце в SQL. Кроме того, лучше хранить идентификатор, а не само имя исполнителя.

Вы можете создать таблицу, как показано ниже:

CREATE TABLE Artist_Billboard
(Artist_id int,
Song_id int,
FOREIGN KEY(Artist_id) REFERENCES Artist(Artist_id),
FOREIGN KEY(Song_id) REFERENCES Billboard(Song_id))

После того, как вы создадите эту таблицу, будет очень легко получить необходимую информацию. Все, что у вас есть, это:

select a.Artist, NumAlbums, count(ab.artist_id) Billboard100
from Artist_Billboard  ab
join Artist a on a.Artist_id = ab.Artist_id
group by a.Artist, NumAlbums

Сценарий БД: https://dbfidddle3bee2e3e06e6e6e6e6e6e6e6e6e6e6e6e06e6e6e08e08e6e05e6e08e6e6 а>

Обновление вопроса в комментарии ниже: Я не уверен, что понимаю ваш вопрос. Если вы спрашиваете, как определить идентификатор песни и исполнителя и выполнить вставку, см. https: //dbfiddle.uk/?rdbms=sqlite_3.27&fiddle=973235257b17dff0900f8adfe6afcd6d

В настоящее время название песни и имя исполнителя жестко запрограммированы. Вам придется сделать что-то подобное.

1
Raseena Abdul 18 Мар 2021 в 17:18