Lab7 : 曲
この Lab では1~2人のクラスメートと協力することは問題ありませんが、そのグループのすべての受講生が等しく実習に貢献することが求められます。
曲のデータベースに関する質問に答えるSQLクエリを記述します。
〆切
2021年12月31日金曜日11:59 PM (東部標準時) までに提出してください。
始め方
この実習を独自のCS50 IDEにダウンロードする方法について説明します。CS50 IDEにログインし、ターミナルウィンドウで次の各コマンドを実行します。
cdを実行して、~/(ホームディレクトリ~)になっていることを確認します。wget https://cdn.cs50.net/2020/fall/labs/7/lab7.zipを実行して、この問題が発生したディストリビューションを含む (圧縮された) ZIPファイルをダウンロードします。unzip lab7.zipを実行して、そのファイルを解凍します。rm lab7.zipを実行し、その後でyesまたはyを実行してZIPファイルを削除します。lsを実行します。ZIPファイル内にあったlab7というディレクトリが表示されます。cd lab7を実行して、そのディレクトリに移動します。lsを実行します。songs.dbファイルと空のsqlファイルも表示されます。
理解を深める
提供されるのはsongs.dbというファイルで、Spotifyからの曲やアーティストに関するデータを保存するSQLiteデータベースです。このデータセットには、2018年にSpotifyでストリーミングされた上位100曲が含まれています。ターミナルウィンドウでsqlite3 songs.dbを実行し、データベースでクエリの実行を開始できるようにします。
まず、sqlite3がクエリの入力を求めるプロンプトを表示したら、.schemaと入力してEnterキーを押します。これにより、データベース内の各テーブルの生成に使用されたCREATETABLEステートメントが出力されます。
すべてのartistにはidとnameがあります。また、すべての曲には、name、artist_id (曲のアーティストのidに対応) 、ダンス、エネルギー、キー、ラウドネス、スピーチ (トラック内の話し言葉の有無) 、バレンス、テンポ、曲の長さ (ミリ秒単位) などの値があります。
今後の課題は、これらのテーブルの1つ以上からデータを選択して、さまざまな質問に答えるSQLクエリを作成することです。
実装の詳細
次の各問題について、各問題で指定された結果を出力する単一のSQL問合せを作成する必要があります。回答は単一のSQL問合せの形式である必要がありますが、クエリ内に他のクエリをネストすることもできます。特定の曲やアーティストのidについて何も仮定しないでください。特定の曲またはアーティストのidが異なっていても、クエリは正確である必要があります。最後に、各クエリは質問に答えるために必要なデータのみを返す必要があります。例えば、問題が曲の名前の出力のみを要求する場合、各曲のテンポなどは出力しないでください。
1.sqlで、データベース内のすべての曲の名前をリストするSQLクエリを記述します。- クエリを実行すると、各曲の名前の列が1つあるテーブルが出力されます。
2.sqlで、すべての曲の名前をテンポの昇順でリストするSQLクエリを記述します。- クエリを実行すると、各曲の名前の列が1つあるテーブルが出力されます。
3.sqlで、最も長い曲の上位5曲の名前を長さの降順でリストするSQLクエリを記述します。- クエリを実行すると、各曲の名前の列が1つあるテーブルが出力されます。
4.sqlで、ダンサビリティ、エネルギー、バレンスが0.75を超える曲の名前をリストするSQLクエリを記述します。- クエリを実行すると、各曲の名前の列が1つあるテーブルが出力されます。
5.sqlで、すべての曲の平均エネルギーを返すSQLクエリを記述します。- クエリは、平均エネルギーを含む単一の列と単一の行を持つテーブルを出力します。
6.sqlで、Post Maloneの曲の名前をリストするSQLクエリを記述します。- クエリを実行すると、各曲の名前の列が1つあるテーブルが出力されます。
- Post Maloneの
artist_idが何であるかについては、仮定を置くべきではありません。
7.sqlで、Drakeの曲の平均エネルギーを返すSQLクエリを記述します。- クエリは、平均エネルギーを含む単一の列と単一の行を持つテーブルを出力します。
- Drakeの
artist_idが何であるかについては、仮定を置くべきではありません。
8.sqlで、他のアーティストをフィーチャーした曲の名前をリストするSQLクエリを記述します。- 他のアーティストをフィーチャーした曲には 「feat」が曲の名前の中に含まれます。
- クエリを実行すると、各曲の名前の列が1つあるテーブルが出力されます。
ウォークスルー
ヒント
- 役立つSQL構文については、このSQLキーワードのリファレンスを参照してください。
解決方法がわかりませんか?
テスト
check50を使用して以下を実行し、コードの正確性を評価します。
check50 cs50/labs/2021/x/songs
提出方法
次のコマンドを実行し、GitHubのユーザー名とパスワードを入力してログインします。セキュリティのため、パスワードには実際の文字ではなくアスタリスク (*) が表示されます。
submit50 cs50/labs/2021/x/songs
謝辞
Kaggleのデータセット。