加入包含 csv 文件的两个表进行查询

问题描述

我有两个 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 中删除 Artist 并创建一个新表来保存艺术家及其歌曲(特别是考虑到艺术家可以是独奏和组合)。不建议在 SQL 中的同一列中有多个值。此外,最好存储 id 而不是艺术家姓名本身。

您可以创建如下表格:

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://dbfiddle.uk/?rdbms=sqlite_3.27&fiddle=a3e9ec59b590e2cbeea0668e2eac0bc1

关于以下评论问题的更新: 我不确定我是否理解你的问题。如果您要询问如何识别 song_id 和 Artist_id 并执行插入操作,请参阅https://dbfiddle.uk/?rdbms=sqlite_3.27&fiddle=973235257b17dff0900f8adfe6afcd6d

目前歌曲名和艺术家名是硬编码的。你必须做类似的事情。