データサイエンス100本ノック(構造化データ加工編)- SQL Part 1 (Q1 to Q20)の解説です。
参照(Reference) : 「データサイエンティスト協会スキル定義委員」の「データサイエンス100本ノック(構造化データ加工編)」
The Data Scientist Society Github :
Data Science 100 Knocks (Structured Data Processing) URL :
はじめに
- データベースはPostgreSQL13です
- 初めに以下のセルを実行してください
- セルに %%sql と記載することでSQLを発行することができます
- jupyterからはdescribeコマンドによるテーブル構造の確認ができないため、テーブル構造を確認する場合はlimitを指定したSELECTなどで代用してください
- 使い慣れたSQLクライアントを使っても問題ありません(接続情報は以下の通り)
- IPアドレス:Docker Desktopの場合はlocalhost、Docker toolboxの場合は192.168.99.100
- Port:5432
- database名: dsdojo_db
- ユーザ名:padawan
- パスワード:padawan12345
- 大量出力を行うとJupyterが固まることがあるため、出力件数は制限することを推奨します(設問にも出力件数を記載)
- 結果確認のために表示させる量を適切にコントロールし、作業を軽快にすすめる技術もデータ加工には求められます
- 大量結果が出力された場合は、ファイルが重くなり以降開けなくなることもあります
- その場合、作業結果は消えますがファイルをGitHubから取り直してください
- vimエディタなどで大量出力範囲を削除することもできます
- 名前、住所等はダミーデータであり、実在するものではありません
%load_ext sql
import os
pgconfig = {
'host': 'db',
'port': os.environ['PG_PORT'],
'database': os.environ['PG_DATABASE'],
'user': os.environ['PG_USER'],
'password': os.environ['PG_PASSWORD'],
}
dsl = 'postgresql://{user}:{password}@{host}:{port}/{database}'.format(**pgconfig)
# MagicコマンドでSQLを書くための設定
%sql $dsl
'Connected: padawan@dsdojo_db'
使い方
セルの先頭に%%sqlと記載し、2行目以降にSQLを記述することでJupyterからPostgreSQLに対しSQLを実行できます。
%%sql
SELECT 'このように実行できます' AS sample;
* postgresql://padawan:***@db:5432/dsdojo_db 1 rows affected.
sample |
---|
このように実行できます |
データ加工100本ノック
S-001: レシート明細データ(receipt)から全項目の先頭10件を表示し、どのようなデータを保有しているか目視で確認せよ。
%%sql
SELECT
*
FROM receipt
LIMIT 10
;
* postgresql://padawan:***@db:5432/dsdojo_db 10 rows affected.
sales_ymd | sales_epoch | store_cd | receipt_no | receipt_sub_no | customer_id | product_cd | quantity | amount |
---|---|---|---|---|---|---|---|---|
20181103 | 1541203200 | S14006 | 112 | 1 | CS006214000001 | P070305012 | 1 | 158 |
20181118 | 1542499200 | S13008 | 1132 | 2 | CS008415000097 | P070701017 | 1 | 81 |
20170712 | 1499817600 | S14028 | 1102 | 1 | CS028414000014 | P060101005 | 1 | 170 |
20190205 | 1549324800 | S14042 | 1132 | 1 | ZZ000000000000 | P050301001 | 1 | 25 |
20180821 | 1534809600 | S14025 | 1102 | 2 | CS025415000050 | P060102007 | 1 | 90 |
20190605 | 1559692800 | S13003 | 1112 | 1 | CS003515000195 | P050102002 | 1 | 138 |
20181205 | 1543968000 | S14024 | 1102 | 2 | CS024514000042 | P080101005 | 1 | 30 |
20190922 | 1569110400 | S14040 | 1102 | 1 | CS040415000178 | P070501004 | 1 | 128 |
20170504 | 1493856000 | S13020 | 1112 | 2 | ZZ000000000000 | P071302010 | 1 | 770 |
20191010 | 1570665600 | S14027 | 1102 | 1 | CS027514000015 | P071101003 | 1 | 680 |
解説:
このコードは、リレーショナルデータベースを管理・操作するためのプログラミング言語であるSQL(Structured Query Language)で記述されています。
このコードでは、"receipt "という名前のテーブルを照会し、アスタリスク(*)ワイルドカード文字を使用してテーブルからすべての列と行を選択しています。クエリの最後にある「LIMIT 10」句は、結果セットをテーブルの最初の10行に制限しています。
簡単に言うと、このコードはデータベースの「receipt」テーブルから最初の10行のデータを取り出しているのです。領収書」テーブルのデータの正確な意味と構造は、データベースのスキーマとそこに格納されている情報によって異なります。
S-002: レシート明細データ(receipt)から売上年月日(sales_ymd)、顧客ID(customer_id)、商品コード(product_cd)、売上金額(amount)の順に列を指定し、10件表示せよ。
%%sql
SELECT
sales_ymd,
customer_id,
product_cd,
amount
FROM receipt
LIMIT 10
;
* postgresql://padawan:***@db:5432/dsdojo_db 10 rows affected.
sales_ymd | customer_id | product_cd | amount |
---|---|---|---|
20181103 | CS006214000001 | P070305012 | 158 |
20181118 | CS008415000097 | P070701017 | 81 |
20170712 | CS028414000014 | P060101005 | 170 |
20190205 | ZZ000000000000 | P050301001 | 25 |
20180821 | CS025415000050 | P060102007 | 90 |
20190605 | CS003515000195 | P050102002 | 138 |
20181205 | CS024514000042 | P080101005 | 30 |
20190922 | CS040415000178 | P070501004 | 128 |
20170504 | ZZ000000000000 | P071302010 | 770 |
20191010 | CS027514000015 | P071101003 | 680 |
解説:
このコードもSQL(Structured Query Language)で書かれており、"receipt "という名前のテーブルを照会しています。
SELECT文を使用して、特定の列 "sales_ymd", "customer_id", "product_cd", "amount "を選択しています。これらの列は、販売日、購入を行った顧客のID、購入した商品のコード、購入金額など、購入取引に関連する様々な情報を表しています。
クエリの最後にある「LIMIT 10」句は、結果セットをテーブルの最初の10行に制限する。つまり、このクエリは、「recipate」テーブルに記録された最初の10件の取引のデータのみを返すことになる。
要約すると、このコードは、データベースの「recipate」テーブルに記録された最初の10件の取引に関する特定の情報を、「sales_ymd」「customer_id」「product_cd」「amount」というカラムを使って取得していることになる。recipate "テーブルのデータの正確な意味と構造は、データベースのスキーマとそこに格納されている情報によって異なります。
S-003: レシート明細データ(receipt)から売上年月日(sales_ymd)、顧客ID(customer_id)、商品コード(product_cd)、売上金額(amount)の順に列を指定し、10件表示せよ。ただし、sales_ymdsales_dateに項目名を変更しながら抽出すること。
%%sql
SELECT
sales_ymd AS sales_date,
customer_id,
product_cd,
amount
FROM receipt
LIMIT 10
;
* postgresql://padawan:***@db:5432/dsdojo_db 10 rows affected.
sales_date | customer_id | product_cd | amount |
---|---|---|---|
20181103 | CS006214000001 | P070305012 | 158 |
20181118 | CS008415000097 | P070701017 | 81 |
20170712 | CS028414000014 | P060101005 | 170 |
20190205 | ZZ000000000000 | P050301001 | 25 |
20180821 | CS025415000050 | P060102007 | 90 |
20190605 | CS003515000195 | P050102002 | 138 |
20181205 | CS024514000042 | P080101005 | 30 |
20190922 | CS040415000178 | P070501004 | 128 |
20170504 | ZZ000000000000 | P071302010 | 770 |
20191010 | CS027514000015 | P071101003 | 680 |
解説:
このコードもSQL(Structured Query Language)で書かれており、"receipt "という名前のテーブルを照会しています。
SELECT文は、"recipate "テーブルから特定の列のデータを取得するために使用されます。しかし、この場合、ASキーワードを使ってカラム名を変更しています。最初のカラムは、「sales_ymd」から「sales_date」に名前が変更されています。他のカラム、「customer_id」、「product_cd」、「amount」は、元の名前のまま保持されています。
クエリの最後にある「LIMIT 10」句は、結果セットをテーブルの最初の10行に制限します。つまり、このクエリは、「recipate」テーブルに記録された最初の10件の取引のデータのみを返すことになります。
要約すると、このコードは、データベースの「recipate」テーブルに記録された最初の10件のトランザクションに関する情報の特定の列を、修正した列名「sales_date」、「customer_id」、「product_cd」、「amount」を使って取得している。recipate」テーブルのデータの正確な意味と構造は、データベースのスキーマとそこに格納されている情報によって異なります。
S-004: レシート明細データ(receipt)から売上日(sales_ymd)、顧客ID(customer_id)、商品コード(product_cd)、売上金額(amount)の順に列を指定し、以下の条件を満たすデータを抽出せよ。
- 顧客ID(customer_id)が”CS018205000001″
%%sql
SELECT
sales_ymd,
customer_id,
product_cd,
amount
FROM
receipt
WHERE
customer_id = 'CS018205000001'
;
* postgresql://padawan:***@db:5432/dsdojo_db 12 rows affected.
sales_ymd | customer_id | product_cd | amount |
---|---|---|---|
20180911 | CS018205000001 | P071401012 | 2200 |
20180414 | CS018205000001 | P060104007 | 600 |
20170614 | CS018205000001 | P050206001 | 990 |
20170614 | CS018205000001 | P060702015 | 108 |
20190216 | CS018205000001 | P071005024 | 102 |
20180414 | CS018205000001 | P071101002 | 278 |
20190226 | CS018205000001 | P070902035 | 168 |
20190924 | CS018205000001 | P060805001 | 495 |
20190226 | CS018205000001 | P071401020 | 2200 |
20180911 | CS018205000001 | P071401005 | 1100 |
20190216 | CS018205000001 | P040101002 | 218 |
20190924 | CS018205000001 | P091503001 | 280 |
解説:
このコードもSQL(Structured Query Language)で書かれており、"receipt "という名前のテーブルを照会しています。
SELECT文は、"recipate "テーブルから特定のデータ列を取得するために使用されます。選択されているカラムは、「sales_ymd」、「customer_id」、「product_cd」、および「amount」です。これらの列は、販売日、購入した顧客のID、購入した商品のコード、購入金額など、購入取引に関連する様々な情報を表しています。
FROM文は、データを取得する「レシート」テーブルを指定します。
WHERE句は、特定の条件に基づいてデータをフィルタリングするために使用されます。この場合、「customer_id」カラムが「CS018205000001」と等しいという条件に基づいてデータがフィルタリングされます。つまり、このクエリーは、ID「CS018205000001」を持つ顧客によって行われた取引のデータのみを取得することになります。
要約すると、このコードはデータベースの「recipate」テーブルから特定の列の情報を取得しているが、ID「CS018205000001」を持つ特定の顧客によって行われた取引についてのみ取得する。領収書」テーブルのデータの正確な意味と構造は、データベースのスキーマとそこに格納されている情報によって異なります。
S-005: レシート明細データ(receipt)から売上日(sales_ymd)、顧客ID(customer_id)、商品コード(product_cd)、売上金額(amount)の順に列を指定し、以下の全ての条件を満たすデータを抽出せよ。
- 顧客ID(customer_id)が”CS018205000001″
- 売上金額(amount)が1,000以上
%%sql
SELECT
sales_ymd,
customer_id,
product_cd,
amount
FROM
receipt
WHERE
customer_id = 'CS018205000001'
AND amount >= 1000
;
* postgresql://padawan:***@db:5432/dsdojo_db 3 rows affected.
sales_ymd | customer_id | product_cd | amount |
---|---|---|---|
20180911 | CS018205000001 | P071401012 | 2200 |
20190226 | CS018205000001 | P071401020 | 2200 |
20180911 | CS018205000001 | P071401005 | 1100 |
解説:
このコードもSQL(Structured Query Language)で書かれており、"receipt "という名前のテーブルを照会しています。
SELECT文は、"recipate "テーブルから特定のデータ列を取得するために使用されます。選択されているカラムは、「sales_ymd」、「customer_id」、「product_cd」、および「amount」です。これらの列は、販売日、購入した顧客のID、購入した商品のコード、購入金額など、購入取引に関連する様々な情報を表しています。
FROM文は、データを取得する「レシート」テーブルを指定します。
WHERE句は、特定の条件に基づいてデータをフィルタリングするために使用されます。この場合、データは2つの条件に基づいてフィルタリングされます。
customer_idカラムが「CS018205000001」と同じであること。
金額カラムは1000以上でなければならない。
つまり、このクエリーは、ID「CS018205000001」の顧客によって行われた取引で、金額が1000以上のデータのみを取得することになります。
要約すると、このコードはデータベースの「recipate」テーブルから特定の列の情報を取得しているが、ID「CS018205000001」を持つ特定の顧客によって行われた取引で、金額が1000以上であるものだけを対象にしている。領収書テーブルのデータの正確な意味と構造は、データベースのスキーマとそこに格納されている情報によって異なります。
S-006: レシート明細データ(receipt)から売上日(sales_ymd)、顧客ID(customer_id)、商品コード(product_cd)、売上数量(quantity)、売上金額(amount)の順に列を指定し、以下の全ての条件を満たすデータを抽出せよ。
- 顧客ID(customer_id)が”CS018205000001″
- 売上金額(amount)が1,000以上または売上数量(quantity)が5以上
%%sql
SELECT
sales_ymd,
customer_id,
product_cd,
quantity,
amount
FROM
receipt
WHERE
customer_id = 'CS018205000001'
AND
(
amount >= 1000
OR quantity >= 5
)
;
* postgresql://padawan:***@db:5432/dsdojo_db 5 rows affected.
sales_ymd | customer_id | product_cd | quantity | amount |
---|---|---|---|---|
20180911 | CS018205000001 | P071401012 | 1 | 2200 |
20180414 | CS018205000001 | P060104007 | 6 | 600 |
20170614 | CS018205000001 | P050206001 | 5 | 990 |
20190226 | CS018205000001 | P071401020 | 1 | 2200 |
20180911 | CS018205000001 | P071401005 | 1 | 1100 |
解説:
このコードもSQL(Structured Query Language)で書かれており、"receipt "という名前のテーブルを照会しています。
SELECT文は、"recipate "テーブルから特定のデータ列を取得するために使用されます。選択されているカラムは、「sales_ymd」、「customer_id」、「product_cd」、「quantity」、および「amount」です。これらの列は、販売日、購入した顧客のID、購入した商品のコード、購入した商品の数量、購入金額など、購入取引に関連する様々な情報を表しています。
FROM文では、データの取得元である「レシート」テーブルを指定します。
WHERE句は、特定の条件に基づいてデータをフィルタリングするために使用されます。この場合、データは2つの条件に基づいてフィルタリングされます。
customer_idカラムが「CS018205000001」と等しいこと。
トランザクションは、次の2つの条件のうち少なくとも1つを満たす必要があります: a. 「金額」カラムが1000以上であること b. 「数量」カラムが5以上であること。
つまり、このクエリは、ID「CS018205000001」の顧客によって行われた取引で、金額が1000以上、または数量が5以上のデータのみを取得することになります。
要約すると、このコードはデータベースの「recipate」テーブルから特定の列の情報を取得しているが、ID「CS018205000001」を持つ特定の顧客が行った取引で、金額が1000以上か数量が5以上のものだけを対象としている。領収書テーブルのデータの正確な意味と構造は、データベースのスキーマとそこに格納されている情報によって異なります。
S-007: レシート明細データ(receipt)から売上日(sales_ymd)、顧客ID(customer_id)、商品コード(product_cd)、売上金額(amount)の順に列を指定し、以下の全ての条件を満たすデータを抽出せよ。
- 顧客ID(customer_id)が”CS018205000001″
- 売上金額(amount)が1,000以上2,000以下
%%sql
SELECT
sales_ymd,
customer_id,
product_cd,
amount
FROM
receipt
WHERE
customer_id = 'CS018205000001'
AND amount BETWEEN 1000 AND 2000
;
* postgresql://padawan:***@db:5432/dsdojo_db 1 rows affected.
sales_ymd | customer_id | product_cd | amount |
---|---|---|---|
20180911 | CS018205000001 | P071401005 | 1100 |
解説:
このコードもSQL(Structured Query Language)で書かれており、"receipt "という名前のテーブルを照会しています。
SELECT文は、"recipate "テーブルから特定のデータ列を取得するために使用されます。選択されているカラムは、「sales_ymd」、「customer_id」、「product_cd」、および「amount」です。これらの列は、販売日、購入した顧客のID、購入した商品のコード、購入金額など、購入取引に関連する様々な情報を表しています。
FROM文は、データを取得する「レシート」テーブルを指定します。
WHERE句は、特定の条件に基づいてデータをフィルタリングするために使用されます。この場合、データは2つの条件に基づいてフィルタリングされます。
customer_idカラムが「CS018205000001」と同じであること。
金額カラムは、1000 から 2000 の間でなければならない。
つまり、このクエリは、ID「CS018205000001」を持つ顧客によって行われた取引で、金額が1000から2000の間であるデータのみを取得することになります(ただし、1000から2000の間は含まれる)。
WHERE句のBETWEEN演算子は、値の範囲に基づいて結果をフィルタリングするために使用されます。この場合、「金額」カラムが1000から2000の間にあるトランザクションを取得するために使用されます(含む)。
要約すると、このコードはデータベースの「receipt」テーブルから特定の列の情報を取得していますが、ID「CS018205000001」を持つ特定の顧客が行った取引で、金額が1000から2000の間にあるものに限定しています。領収書テーブルのデータの正確な意味と構造は、データベースのスキーマとそこに格納されている情報によって異なります。
S-008: レシート明細データ(receipt)から売上日(sales_ymd)、顧客ID(customer_id)、商品コード(product_cd)、売上金額(amount)の順に列を指定し、以下の全ての条件を満たすデータを抽出せよ。
- 顧客ID(customer_id)が”CS018205000001″
- 商品コード(product_cd)が”P071401019″以外
%%sql
SELECT
sales_ymd,
customer_id,
product_cd, amount
FROM
receipt
WHERE
customer_id = 'CS018205000001'
AND product_cd != 'P071401019'
;
* postgresql://padawan:***@db:5432/dsdojo_db 12 rows affected.
sales_ymd | customer_id | product_cd | amount |
---|---|---|---|
20180911 | CS018205000001 | P071401012 | 2200 |
20180414 | CS018205000001 | P060104007 | 600 |
20170614 | CS018205000001 | P050206001 | 990 |
20170614 | CS018205000001 | P060702015 | 108 |
20190216 | CS018205000001 | P071005024 | 102 |
20180414 | CS018205000001 | P071101002 | 278 |
20190226 | CS018205000001 | P070902035 | 168 |
20190924 | CS018205000001 | P060805001 | 495 |
20190226 | CS018205000001 | P071401020 | 2200 |
20180911 | CS018205000001 | P071401005 | 1100 |
20190216 | CS018205000001 | P040101002 | 218 |
20190924 | CS018205000001 | P091503001 | 280 |
解説:
このコードはSQL言語で書かれており、データベースへの問い合わせを行っています。
このクエリは、SELECT文を使用して、"recipate "テーブルからデータを選択しています。
選択されているカラムは以下の通りです。「sales_ymd", "customer_id", "product_cd", "amount "です。
このクエリは、「customer_id」が「CS018205000001」と等しく、「product_cd」が「P0714019」と等しくないレコードのみを選択して、データをフィルタリングしています。
つまり、このクエリーは、customer_id 'CS018205000001' に対して、product_cd が 'P071401019' であるレコードを除くすべてのレコードを返すことになる。
このコードは、Jupyterノートブック内でSQLマジックコマンド「%%sql」を使用して実行されています。このコマンドにより、SQLコードをノートブック内で直接実行することができます。
S-009: 以下の処理において、出力結果を変えずにORをANDに書き換えよ。
SELECT * FROM store WHERE NOT (prefecture_cd = '13' OR floor_area > 900)
%%sql
SELECT * FROM store WHERE prefecture_cd != '13' AND floor_area <= 900;
* postgresql://padawan:***@db:5432/dsdojo_db 3 rows affected.
store_cd | store_name | prefecture_cd | prefecture | address | address_kana | tel_no | longitude | latitude | floor_area |
---|---|---|---|---|---|---|---|---|---|
S14046 | 北山田店 | 14 | 神奈川県 | 神奈川県横浜市都筑区北山田一丁目 | カナガワケンヨコハマシツヅキクキタヤマタイッチョウメ | 045-123-4049 | 139.5916 | 35.56189 | 831.0 |
S14011 | 日吉本町店 | 14 | 神奈川県 | 神奈川県横浜市港北区日吉本町四丁目 | カナガワケンヨコハマシコウホククヒヨシホンチョウヨンチョウメ | 045-123-4033 | 139.6316 | 35.54655 | 890.0 |
S12013 | 習志野店 | 12 | 千葉県 | 千葉県習志野市芝園一丁目 | チバケンナラシノシシバゾノイッチョウメ | 047-123-4002 | 140.022 | 35.66122 | 808.0 |
解説:
このコードはSQL言語で書かれており、データベースへの問い合わせを行っています。
SELECT文を使用して、"store "テーブルからすべてのカラムを選択しています。
このクエリは、「prefecture_cd」が「13」と等しくなく、「floor_area」が900以下であるレコードのみを選択することによってデータをフィルタリングしています。
つまり、このクエリーは「store」テーブルから「prefecture_cd」が13以下、「floor_area」が900以下のすべてのレコードを返すことになります。
このコードは、Jupyterノートブック内でSQLマジックコマンド「%%sql」を使って実行されています。このコマンドにより、SQLコードをノートブック内で直接実行することができます。
S-010: 店舗データ(store)から、店舗コード(store_cd)が”S14″で始まるものだけ全項目抽出し、10件表示せよ。
%%sql
SELECT
*
FROM store
WHERE
store_cd LIKE 'S14%'
LIMIT 10
;
* postgresql://padawan:***@db:5432/dsdojo_db 10 rows affected.
store_cd | store_name | prefecture_cd | prefecture | address | address_kana | tel_no | longitude | latitude | floor_area |
---|---|---|---|---|---|---|---|---|---|
S14010 | 菊名店 | 14 | 神奈川県 | 神奈川県横浜市港北区菊名一丁目 | カナガワケンヨコハマシコウホククキクナイッチョウメ | 045-123-4032 | 139.6326 | 35.50049 | 1732.0 |
S14033 | 阿久和店 | 14 | 神奈川県 | 神奈川県横浜市瀬谷区阿久和西一丁目 | カナガワケンヨコハマシセヤクアクワニシイッチョウメ | 045-123-4043 | 139.4961 | 35.45918 | 1495.0 |
S14036 | 相模原中央店 | 14 | 神奈川県 | 神奈川県相模原市中央二丁目 | カナガワケンサガミハラシチュウオウニチョウメ | 042-123-4045 | 139.3716 | 35.57327 | 1679.0 |
S14040 | 長津田店 | 14 | 神奈川県 | 神奈川県横浜市緑区長津田みなみ台五丁目 | カナガワケンヨコハマシミドリクナガツタミナミダイゴチョウメ | 045-123-4046 | 139.4994 | 35.52398 | 1548.0 |
S14050 | 阿久和西店 | 14 | 神奈川県 | 神奈川県横浜市瀬谷区阿久和西一丁目 | カナガワケンヨコハマシセヤクアクワニシイッチョウメ | 045-123-4053 | 139.4961 | 35.45918 | 1830.0 |
S14028 | 二ツ橋店 | 14 | 神奈川県 | 神奈川県横浜市瀬谷区二ツ橋町 | カナガワケンヨコハマシセヤクフタツバシチョウ | 045-123-4042 | 139.4963 | 35.46304 | 1574.0 |
S14012 | 本牧和田店 | 14 | 神奈川県 | 神奈川県横浜市中区本牧和田 | カナガワケンヨコハマシナカクホンモクワダ | 045-123-4034 | 139.6582 | 35.42156 | 1341.0 |
S14046 | 北山田店 | 14 | 神奈川県 | 神奈川県横浜市都筑区北山田一丁目 | カナガワケンヨコハマシツヅキクキタヤマタイッチョウメ | 045-123-4049 | 139.5916 | 35.56189 | 831.0 |
S14022 | 逗子店 | 14 | 神奈川県 | 神奈川県逗子市逗子一丁目 | カナガワケンズシシズシイッチョウメ | 046-123-4036 | 139.5789 | 35.29642 | 1838.0 |
S14011 | 日吉本町店 | 14 | 神奈川県 | 神奈川県横浜市港北区日吉本町四丁目 | カナガワケンヨコハマシコウホククヒヨシホンチョウヨンチョウメ | 045-123-4033 | 139.6316 | 35.54655 | 890.0 |
解説:
このコードはSQL言語で書かれており、データベースへの問い合わせを行っています。
このクエリは、SELECT文を使用して、"store "テーブルからすべてのカラムを選択しています。
クエリは、ワイルドカード文字「%」を使用したLIKE演算子を使用して、「store_cd」列が文字「S14」で始まるレコードのみを選択することでデータをフィルタリングしています。
また、このクエリは LIMIT 句を使用して、返されるレコードの数を 10 に制限しています。
つまり、このクエリは「store」テーブルから「store_cd」が「S14」で始まるレコードを最大10件まで返すことになります。
このコードは、Jupyterノートブック内でSQLマジックコマンド「%%sql」を使用して実行されています。このコマンドにより、SQLコードをノートブック内で直接実行することができます。
S-011: 顧客データ(customer)から顧客ID(customer_id)の末尾が1のものだけ全項目抽出し、10件表示せよ。
%%sql
SELECT * FROM customer WHERE customer_id LIKE '%1' LIMIT 10;
* postgresql://padawan:***@db:5432/dsdojo_db 10 rows affected.
customer_id | customer_name | gender_cd | gender | birth_day | age | postal_cd | address | application_store_cd | application_date | status_cd |
---|---|---|---|---|---|---|---|---|---|---|
CS037613000071 | 六角 雅彦 | 9 | 不明 | 1952-04-01 | 66 | 136-0076 | 東京都江東区南砂********** | S13037 | 20150414 | 0-00000000-0 |
CS028811000001 | 堀井 かおり | 1 | 女性 | 1933-03-27 | 86 | 245-0016 | 神奈川県横浜市泉区和泉町********** | S14028 | 20160115 | 0-00000000-0 |
CS040412000191 | 川井 郁恵 | 1 | 女性 | 1977-01-05 | 42 | 226-0021 | 神奈川県横浜市緑区北八朔町********** | S14040 | 20151101 | 1-20091025-4 |
CS028314000011 | 小菅 あおい | 1 | 女性 | 1983-11-26 | 35 | 246-0038 | 神奈川県横浜市瀬谷区宮沢********** | S14028 | 20151123 | 1-20080426-5 |
CS039212000051 | 藤島 恵梨香 | 1 | 女性 | 1997-02-03 | 22 | 166-0001 | 東京都杉並区阿佐谷北********** | S13039 | 20171121 | 1-20100215-4 |
CS015412000111 | 松居 奈月 | 1 | 女性 | 1972-10-04 | 46 | 136-0071 | 東京都江東区亀戸********** | S13015 | 20150629 | 0-00000000-0 |
CS004702000041 | 野島 洋 | 0 | 男性 | 1943-08-24 | 75 | 176-0022 | 東京都練馬区向山********** | S13004 | 20170218 | 0-00000000-0 |
CS041515000001 | 栗田 千夏 | 1 | 女性 | 1967-01-02 | 52 | 206-0001 | 東京都多摩市和田********** | S13041 | 20160422 | E-20100803-F |
CS029313000221 | 北条 ひかり | 1 | 女性 | 1987-06-19 | 31 | 279-0011 | 千葉県浦安市美浜********** | S12029 | 20180810 | 0-00000000-0 |
CS034312000071 | 望月 奈央 | 1 | 女性 | 1980-09-20 | 38 | 213-0026 | 神奈川県川崎市高津区久末********** | S14034 | 20160106 | 0-00000000-0 |
解説:
このコードはSQL言語で書かれており、データベースへの問い合わせを行っています。
このクエリは、SELECT文を使用して、「customer」テーブルからすべてのカラムを選択しています。
クエリは、ワイルドカード文字「%」を使用したLIKE演算子を使用して、「customer_id」列の末尾が数字「1」であるレコードのみを選択し、データをフィルタリングしています。
また、LIMIT句を使用して、返されるレコードの数を10に制限しています。
つまり、このクエリーは、「customer_id」の末尾が数字「1」である「customer」テーブルから最大10件のレコードを返すことになります。
このコードは、Jupyterノートブック内でSQLマジックコマンド「%%sql」を使って実行されています。このコマンドにより、ノートブック内でSQLコードを直接実行することができます。
S-012: 店舗データ(store)から、住所 (address) に”横浜市”が含まれるものだけ全項目表示せよ。
%%sql
SELECT * FROM store WHERE address LIKE '%横浜市%';
* postgresql://padawan:***@db:5432/dsdojo_db 11 rows affected.
store_cd | store_name | prefecture_cd | prefecture | address | address_kana | tel_no | longitude | latitude | floor_area |
---|---|---|---|---|---|---|---|---|---|
S14010 | 菊名店 | 14 | 神奈川県 | 神奈川県横浜市港北区菊名一丁目 | カナガワケンヨコハマシコウホククキクナイッチョウメ | 045-123-4032 | 139.6326 | 35.50049 | 1732.0 |
S14033 | 阿久和店 | 14 | 神奈川県 | 神奈川県横浜市瀬谷区阿久和西一丁目 | カナガワケンヨコハマシセヤクアクワニシイッチョウメ | 045-123-4043 | 139.4961 | 35.45918 | 1495.0 |
S14040 | 長津田店 | 14 | 神奈川県 | 神奈川県横浜市緑区長津田みなみ台五丁目 | カナガワケンヨコハマシミドリクナガツタミナミダイゴチョウメ | 045-123-4046 | 139.4994 | 35.52398 | 1548.0 |
S14050 | 阿久和西店 | 14 | 神奈川県 | 神奈川県横浜市瀬谷区阿久和西一丁目 | カナガワケンヨコハマシセヤクアクワニシイッチョウメ | 045-123-4053 | 139.4961 | 35.45918 | 1830.0 |
S14028 | 二ツ橋店 | 14 | 神奈川県 | 神奈川県横浜市瀬谷区二ツ橋町 | カナガワケンヨコハマシセヤクフタツバシチョウ | 045-123-4042 | 139.4963 | 35.46304 | 1574.0 |
S14012 | 本牧和田店 | 14 | 神奈川県 | 神奈川県横浜市中区本牧和田 | カナガワケンヨコハマシナカクホンモクワダ | 045-123-4034 | 139.6582 | 35.42156 | 1341.0 |
S14046 | 北山田店 | 14 | 神奈川県 | 神奈川県横浜市都筑区北山田一丁目 | カナガワケンヨコハマシツヅキクキタヤマタイッチョウメ | 045-123-4049 | 139.5916 | 35.56189 | 831.0 |
S14011 | 日吉本町店 | 14 | 神奈川県 | 神奈川県横浜市港北区日吉本町四丁目 | カナガワケンヨコハマシコウホククヒヨシホンチョウヨンチョウメ | 045-123-4033 | 139.6316 | 35.54655 | 890.0 |
S14048 | 中川中央店 | 14 | 神奈川県 | 神奈川県横浜市都筑区中川中央二丁目 | カナガワケンヨコハマシツヅキクナカガワチュウオウニチョウメ | 045-123-4051 | 139.5758 | 35.54912 | 1657.0 |
S14042 | 新山下店 | 14 | 神奈川県 | 神奈川県横浜市中区新山下二丁目 | カナガワケンヨコハマシナカクシンヤマシタニチョウメ | 045-123-4047 | 139.6593 | 35.43894 | 1044.0 |
S14006 | 葛が谷店 | 14 | 神奈川県 | 神奈川県横浜市都筑区葛が谷 | カナガワケンヨコハマシツヅキククズガヤ | 045-123-4031 | 139.5633 | 35.53573 | 1886.0 |
解説:
このコードはSQL言語で書かれており、データベースへの問い合わせを行っています。
このクエリは、SELECT ステートメントを使用して、"store" テーブルからすべてのカラムを選択しています。
クエリは、ワイルドカード文字「%」を含むLIKE演算子を使用して、「address」列に文字列「横浜市」が含まれるレコードのみを選択することでデータをフィルタリングしています。
つまり、このクエリーは「store」テーブルから「address」カラムに文字列「横浜市」が含まれるすべてのレコードを返すことになります。
このコードは、Jupyterノートブック内でSQLマジックコマンド「%%sql」を使って実行されています。このコマンドにより、ノートブック内でSQLコードを直接実行することができます。
S-013: 顧客データ(customer)から、ステータスコード(status_cd)の先頭がアルファベットのA〜Fで始まるデータを全項目抽出し、10件表示せよ。
%%sql
SELECT * FROM customer WHERE status_cd ~ '^[A-F]' LIMIT 10;
* postgresql://padawan:***@db:5432/dsdojo_db 10 rows affected.
customer_id | customer_name | gender_cd | gender | birth_day | age | postal_cd | address | application_store_cd | application_date | status_cd |
---|---|---|---|---|---|---|---|---|---|---|
CS031415000172 | 宇多田 貴美子 | 1 | 女性 | 1976-10-04 | 42 | 151-0053 | 東京都渋谷区代々木********** | S13031 | 20150529 | D-20100325-C |
CS015414000103 | 奥野 陽子 | 1 | 女性 | 1977-08-09 | 41 | 136-0073 | 東京都江東区北砂********** | S13015 | 20150722 | B-20100609-B |
CS011215000048 | 芦田 沙耶 | 1 | 女性 | 1992-02-01 | 27 | 223-0062 | 神奈川県横浜市港北区日吉本町********** | S14011 | 20150228 | C-20100421-9 |
CS029415000023 | 梅田 里穂 | 1 | 女性 | 1976-01-17 | 43 | 279-0043 | 千葉県浦安市富士見********** | S12029 | 20150610 | D-20100918-E |
CS035415000029 | 寺沢 真希 | 9 | 不明 | 1977-09-27 | 41 | 158-0096 | 東京都世田谷区玉川台********** | S13035 | 20141220 | F-20101029-F |
CS031415000106 | 宇野 由美子 | 1 | 女性 | 1970-02-26 | 49 | 151-0053 | 東京都渋谷区代々木********** | S13031 | 20150201 | F-20100511-E |
CS029215000025 | 石倉 美帆 | 1 | 女性 | 1993-09-28 | 25 | 279-0022 | 千葉県浦安市今川********** | S12029 | 20150708 | B-20100820-C |
CS033605000005 | 猪股 雄太 | 0 | 男性 | 1955-12-05 | 63 | 246-0031 | 神奈川県横浜市瀬谷区瀬谷********** | S14033 | 20150425 | F-20100917-E |
CS033415000229 | 板垣 菜々美 | 1 | 女性 | 1977-11-07 | 41 | 246-0021 | 神奈川県横浜市瀬谷区二ツ橋町********** | S14033 | 20150712 | F-20100326-E |
CS008415000145 | 黒谷 麻緒 | 1 | 女性 | 1977-06-27 | 41 | 157-0067 | 東京都世田谷区喜多見********** | S13008 | 20150829 | F-20100622-F |
解説:
このコードはSQL言語で書かれており、データベースへの問い合わせを行っています。
このクエリは、SELECT文を使用して、「customer」テーブルからすべてのカラムを選択しています。
このクエリは、「status_cd」カラムが正規表現パターン「^[A-F]」に一致するレコードのみを選択することで、データをフィルタリングしています(~演算子を使用)。
正規表現パターン '^[A-F]' は、"status_cd" カラムの A から F で始まるすべての値に一致します。パターン内の ^ 文字は文字列の開始を示し、 [A-F] は文字の範囲を指定します。
また、このクエリーはLIMIT句を使用して、返されるレコードの数を10に制限しています。
つまり、このクエリーは、「status_cd」カラムがA~Fの文字で始まる「customer」テーブルから最大10レコードを返すことになります。
このコードは、Jupyterノートブック内でSQLマジックコマンド「%%sql」を使って実行されています。このコマンドにより、SQLコードをノートブック内で直接実行することができます。
S-014: 顧客データ(customer)から、ステータスコード(status_cd)の末尾が数字の1〜9で終わるデータを全項目抽出し、10件表示せよ。
%%sql
SELECT * FROM customer WHERE status_cd ~ '[1-9]$' LIMIT 10;
* postgresql://padawan:***@db:5432/dsdojo_db 10 rows affected.
customer_id | customer_name | gender_cd | gender | birth_day | age | postal_cd | address | application_store_cd | application_date | status_cd |
---|---|---|---|---|---|---|---|---|---|---|
CS001215000145 | 田崎 美紀 | 1 | 女性 | 1995-03-29 | 24 | 144-0055 | 東京都大田区仲六郷********** | S13001 | 20170605 | 6-20090929-2 |
CS033513000180 | 安斎 遥 | 1 | 女性 | 1962-07-11 | 56 | 241-0823 | 神奈川県横浜市旭区善部町********** | S14033 | 20150728 | 6-20080506-5 |
CS011215000048 | 芦田 沙耶 | 1 | 女性 | 1992-02-01 | 27 | 223-0062 | 神奈川県横浜市港北区日吉本町********** | S14011 | 20150228 | C-20100421-9 |
CS040412000191 | 川井 郁恵 | 1 | 女性 | 1977-01-05 | 42 | 226-0021 | 神奈川県横浜市緑区北八朔町********** | S14040 | 20151101 | 1-20091025-4 |
CS009315000023 | 皆川 文世 | 1 | 女性 | 1980-04-15 | 38 | 154-0012 | 東京都世田谷区駒沢********** | S13009 | 20150319 | 5-20080322-1 |
CS015315000033 | 福士 璃奈子 | 1 | 女性 | 1983-03-17 | 36 | 135-0043 | 東京都江東区塩浜********** | S13015 | 20141024 | 4-20080219-3 |
CS023513000066 | 神戸 そら | 1 | 女性 | 1961-12-17 | 57 | 210-0005 | 神奈川県川崎市川崎区東田町********** | S14023 | 20150915 | 5-20100524-9 |
CS035513000134 | 市川 美帆 | 1 | 女性 | 1960-03-27 | 59 | 156-0053 | 東京都世田谷区桜********** | S13035 | 20150227 | 8-20100711-9 |
CS001515000263 | 高松 夏空 | 1 | 女性 | 1962-11-09 | 56 | 144-0051 | 東京都大田区西蒲田********** | S13001 | 20160812 | 1-20100804-1 |
CS040314000027 | 鶴田 きみまろ | 9 | 不明 | 1986-03-26 | 33 | 226-0027 | 神奈川県横浜市緑区長津田********** | S14040 | 20150122 | 2-20080426-4 |
解説:
このコードはSQL言語で書かれており、データベースへの問い合わせを行っています。
このクエリは、SELECT文を使用して、「customer」テーブルからすべてのカラムを選択しています。
このクエリは、"status_cd "カラムが正規表現パターン'[1-9]$'に一致するレコードのみを選択することで、データをフィルタリングしています(~演算子を使用しています)。
正規表現パターン '[1-9]$' は、"status_cd" カラムの 1 から 9 までの数字で終わるすべての値に一致します。パターン内の$文字は文字列の終わりを示し、[1-9]は文字範囲を指定する。
また、このクエリーはLIMIT句を使用して、返されるレコードの数を10に制限しています。
つまり、このクエリーは、「status_cd」カラムの末尾が1~9の数字である「customer」テーブルから、最大10件のレコードを返すことになります。
このコードは、Jupyterノートブック内でSQLマジックコマンド「%%sql」を使って実行されています。このコマンドにより、ノートブック内でSQLコードを直接実行することができます。
S-015: 顧客データ(customer)から、ステータスコード(status_cd)の先頭がアルファベットのA〜Fで始まり、末尾が数字の1〜9で終わるデータを全項目抽出し、10件表示せよ。
%%sql
SELECT * FROM customer WHERE status_cd ~ '^[A-F].*[1-9]$' LIMIT 10;
* postgresql://padawan:***@db:5432/dsdojo_db 10 rows affected.
customer_id | customer_name | gender_cd | gender | birth_day | age | postal_cd | address | application_store_cd | application_date | status_cd |
---|---|---|---|---|---|---|---|---|---|---|
CS011215000048 | 芦田 沙耶 | 1 | 女性 | 1992-02-01 | 27 | 223-0062 | 神奈川県横浜市港北区日吉本町********** | S14011 | 20150228 | C-20100421-9 |
CS022513000105 | 島村 貴美子 | 1 | 女性 | 1962-03-12 | 57 | 249-0002 | 神奈川県逗子市山の根********** | S14022 | 20150320 | A-20091115-7 |
CS001515000096 | 水野 陽子 | 9 | 不明 | 1960-11-29 | 58 | 144-0053 | 東京都大田区蒲田本町********** | S13001 | 20150614 | A-20100724-7 |
CS013615000053 | 西脇 季衣 | 1 | 女性 | 1953-10-18 | 65 | 261-0026 | 千葉県千葉市美浜区幕張西********** | S12013 | 20150128 | B-20100329-6 |
CS020412000161 | 小宮 薫 | 1 | 女性 | 1974-05-21 | 44 | 174-0042 | 東京都板橋区東坂下********** | S13020 | 20150822 | B-20081021-3 |
CS001215000097 | 竹中 あさみ | 1 | 女性 | 1990-07-25 | 28 | 146-0095 | 東京都大田区多摩川********** | S13001 | 20170315 | A-20100211-2 |
CS035212000007 | 内村 恵梨香 | 1 | 女性 | 1990-12-04 | 28 | 152-0023 | 東京都目黒区八雲********** | S13035 | 20151013 | B-20101018-6 |
CS002515000386 | 野田 コウ | 1 | 女性 | 1963-05-30 | 55 | 185-0013 | 東京都国分寺市西恋ケ窪********** | S13002 | 20160410 | C-20100127-8 |
CS001615000372 | 稲垣 寿々花 | 1 | 女性 | 1956-10-29 | 62 | 144-0035 | 東京都大田区南蒲田********** | S13001 | 20170403 | A-20100104-1 |
CS032512000121 | 松井 知世 | 1 | 女性 | 1962-09-04 | 56 | 210-0011 | 神奈川県川崎市川崎区富士見********** | S13032 | 20150727 | A-20100103-5 |
解説:
このコードはSQL言語で書かれており、データベースへの問い合わせを行っています。
このクエリは、SELECT文を使用して、「customer」テーブルからすべてのカラムを選択しています。
このクエリは、「status_cd」カラムが正規表現パターン「^[A-F].*[1-9]$」に一致するレコードのみを選択することで、データをフィルタリングしています(~演算子を使用しています)。
正規表現パターン「^[A-F].*[1-9]$」は、「status_cd」列の、A~Fで始まり、任意の数の文字が続き、1~9の数字で終わるすべての値と一致します。パターン内の ^ 文字は文字列の開始を示し、$ 文字は文字列の終了を示す。
また、このクエリーはLIMIT句を使用して、返されるレコードの数を10に制限しています。
つまり、このクエリーは、「status_cd」カラムがA~Fの文字で始まり、1~9の数字で終わる「customer」テーブルから最大10件のレコードを返すことになります。
このコードは、Jupyterノートブック内でSQLマジックコマンド「%%sql」を使って実行されています。このコマンドにより、SQLコードをノートブック内で直接実行することができます。
S-016: 店舗データ(store)から、電話番号(tel_no)が3桁-3桁-4桁のデータを全項目表示せよ。
%%sql
SELECT * FROM store WHERE tel_no ~ '^[0-9]{3}-[0-9]{3}-[0-9]{4}$';
* postgresql://padawan:***@db:5432/dsdojo_db 34 rows affected.
store_cd | store_name | prefecture_cd | prefecture | address | address_kana | tel_no | longitude | latitude | floor_area |
---|---|---|---|---|---|---|---|---|---|
S12014 | 千草台店 | 12 | 千葉県 | 千葉県千葉市稲毛区千草台一丁目 | チバケンチバシイナゲクチグサダイイッチョウメ | 043-123-4003 | 140.118 | 35.63559 | 1698.0 |
S13002 | 国分寺店 | 13 | 東京都 | 東京都国分寺市本多二丁目 | トウキョウトコクブンジシホンダニチョウメ | 042-123-4008 | 139.4802 | 35.70566 | 1735.0 |
S14010 | 菊名店 | 14 | 神奈川県 | 神奈川県横浜市港北区菊名一丁目 | カナガワケンヨコハマシコウホククキクナイッチョウメ | 045-123-4032 | 139.6326 | 35.50049 | 1732.0 |
S14033 | 阿久和店 | 14 | 神奈川県 | 神奈川県横浜市瀬谷区阿久和西一丁目 | カナガワケンヨコハマシセヤクアクワニシイッチョウメ | 045-123-4043 | 139.4961 | 35.45918 | 1495.0 |
S14036 | 相模原中央店 | 14 | 神奈川県 | 神奈川県相模原市中央二丁目 | カナガワケンサガミハラシチュウオウニチョウメ | 042-123-4045 | 139.3716 | 35.57327 | 1679.0 |
S14040 | 長津田店 | 14 | 神奈川県 | 神奈川県横浜市緑区長津田みなみ台五丁目 | カナガワケンヨコハマシミドリクナガツタミナミダイゴチョウメ | 045-123-4046 | 139.4994 | 35.52398 | 1548.0 |
S14050 | 阿久和西店 | 14 | 神奈川県 | 神奈川県横浜市瀬谷区阿久和西一丁目 | カナガワケンヨコハマシセヤクアクワニシイッチョウメ | 045-123-4053 | 139.4961 | 35.45918 | 1830.0 |
S13052 | 森野店 | 13 | 東京都 | 東京都町田市森野三丁目 | トウキョウトマチダシモリノサンチョウメ | 042-123-4030 | 139.4383 | 35.55293 | 1087.0 |
S14028 | 二ツ橋店 | 14 | 神奈川県 | 神奈川県横浜市瀬谷区二ツ橋町 | カナガワケンヨコハマシセヤクフタツバシチョウ | 045-123-4042 | 139.4963 | 35.46304 | 1574.0 |
S14012 | 本牧和田店 | 14 | 神奈川県 | 神奈川県横浜市中区本牧和田 | カナガワケンヨコハマシナカクホンモクワダ | 045-123-4034 | 139.6582 | 35.42156 | 1341.0 |
S14046 | 北山田店 | 14 | 神奈川県 | 神奈川県横浜市都筑区北山田一丁目 | カナガワケンヨコハマシツヅキクキタヤマタイッチョウメ | 045-123-4049 | 139.5916 | 35.56189 | 831.0 |
S14022 | 逗子店 | 14 | 神奈川県 | 神奈川県逗子市逗子一丁目 | カナガワケンズシシズシイッチョウメ | 046-123-4036 | 139.5789 | 35.29642 | 1838.0 |
S14011 | 日吉本町店 | 14 | 神奈川県 | 神奈川県横浜市港北区日吉本町四丁目 | カナガワケンヨコハマシコウホククヒヨシホンチョウヨンチョウメ | 045-123-4033 | 139.6316 | 35.54655 | 890.0 |
S13016 | 小金井店 | 13 | 東京都 | 東京都小金井市本町一丁目 | トウキョウトコガネイシホンチョウイッチョウメ | 042-123-4015 | 139.5094 | 35.70018 | 1399.0 |
S14034 | 川崎野川店 | 14 | 神奈川県 | 神奈川県川崎市宮前区野川 | カナガワケンカワサキシミヤマエクノガワ | 044-123-4044 | 139.5998 | 35.57693 | 1318.0 |
S14048 | 中川中央店 | 14 | 神奈川県 | 神奈川県横浜市都筑区中川中央二丁目 | カナガワケンヨコハマシツヅキクナカガワチュウオウニチョウメ | 045-123-4051 | 139.5758 | 35.54912 | 1657.0 |
S12007 | 佐倉店 | 12 | 千葉県 | 千葉県佐倉市上志津 | チバケンサクラシカミシヅ | 043-123-4001 | 140.1452 | 35.71872 | 1895.0 |
S14026 | 辻堂西海岸店 | 14 | 神奈川県 | 神奈川県藤沢市辻堂西海岸二丁目 | カナガワケンフジサワシツジドウニシカイガンニチョウメ | 046-123-4040 | 139.4466 | 35.32464 | 1732.0 |
S13041 | 八王子店 | 13 | 東京都 | 東京都八王子市大塚 | トウキョウトハチオウジシオオツカ | 042-123-4026 | 139.4235 | 35.63787 | 810.0 |
S14049 | 川崎大師店 | 14 | 神奈川県 | 神奈川県川崎市川崎区中瀬三丁目 | カナガワケンカワサキシカワサキクナカゼサンチョウメ | 044-123-4052 | 139.7327 | 35.53759 | 962.0 |
S14023 | 川崎店 | 14 | 神奈川県 | 神奈川県川崎市川崎区本町二丁目 | カナガワケンカワサキシカワサキクホンチョウニチョウメ | 044-123-4037 | 139.7028 | 35.53599 | 1804.0 |
S13018 | 清瀬店 | 13 | 東京都 | 東京都清瀬市松山一丁目 | トウキョウトキヨセシマツヤマイッチョウメ | 042-123-4017 | 139.5178 | 35.76885 | 1220.0 |
S14027 | 南藤沢店 | 14 | 神奈川県 | 神奈川県藤沢市南藤沢 | カナガワケンフジサワシミナミフジサワ | 046-123-4041 | 139.4896 | 35.33762 | 1521.0 |
S14021 | 伊勢原店 | 14 | 神奈川県 | 神奈川県伊勢原市伊勢原四丁目 | カナガワケンイセハラシイセハラヨンチョウメ | 046-123-4035 | 139.3129 | 35.40169 | 962.0 |
S14047 | 相模原店 | 14 | 神奈川県 | 神奈川県相模原市千代田六丁目 | カナガワケンサガミハラシチヨダロクチョウメ | 042-123-4050 | 139.3748 | 35.55959 | 1047.0 |
S12013 | 習志野店 | 12 | 千葉県 | 千葉県習志野市芝園一丁目 | チバケンナラシノシシバゾノイッチョウメ | 047-123-4002 | 140.022 | 35.66122 | 808.0 |
S14042 | 新山下店 | 14 | 神奈川県 | 神奈川県横浜市中区新山下二丁目 | カナガワケンヨコハマシナカクシンヤマシタニチョウメ | 045-123-4047 | 139.6593 | 35.43894 | 1044.0 |
S12030 | 八幡店 | 12 | 千葉県 | 千葉県市川市八幡三丁目 | チバケンイチカワシヤワタサンチョウメ | 047-123-4005 | 139.924 | 35.72318 | 1162.0 |
S14025 | 大和店 | 14 | 神奈川県 | 神奈川県大和市下和田 | カナガワケンヤマトシシモワダ | 046-123-4039 | 139.468 | 35.43414 | 1011.0 |
S14045 | 厚木店 | 14 | 神奈川県 | 神奈川県厚木市中町二丁目 | カナガワケンアツギシナカチョウニチョウメ | 046-123-4048 | 139.3651 | 35.44182 | 980.0 |
S12029 | 東野店 | 12 | 千葉県 | 千葉県浦安市東野一丁目 | チバケンウラヤスシヒガシノイッチョウメ | 047-123-4004 | 139.8968 | 35.65086 | 1101.0 |
S12053 | 高洲店 | 12 | 千葉県 | 千葉県浦安市高洲五丁目 | チバケンウラヤスシタカスゴチョウメ | 047-123-4006 | 139.9176 | 35.63755 | 1555.0 |
S14024 | 三田店 | 14 | 神奈川県 | 神奈川県川崎市多摩区三田四丁目 | カナガワケンカワサキシタマクミタヨンチョウメ | 044-123-4038 | 139.5424 | 35.6077 | 972.0 |
S14006 | 葛が谷店 | 14 | 神奈川県 | 神奈川県横浜市都筑区葛が谷 | カナガワケンヨコハマシツヅキククズガヤ | 045-123-4031 | 139.5633 | 35.53573 | 1886.0 |
解説:
このコードはSQL言語で書かれており、データベースへの問い合わせを行っています。
このクエリは、SELECT文を使用して、「store」テーブルからすべてのカラムを選択しています。
このクエリは、「tel_no」カラムが正規表現パターン「^[0-9]{3}-[0-9]{3}-[0-9]{4}$」に一致するレコードのみを選択し、データをフィルタリングしています(~演算子を使用しています)。
正規表現パターン '^[0-9]{3}-[0-9]{3}-[0-9]{4}$' は、「tel_no」列の値のうち、##-###-## の形式を持つ有効な電話番号に従うものにマッチします(各#は1桁を表す)。パターン中の^文字は文字列の開始を示し、$文字は文字列の終了を示す。3}と{4}は、電話番号の各セクションに含まれる正確な桁数を指定する量化子です。
つまり、このクエリは、「store」テーブルから、「tel_no」カラムが有効な電話番号のフォーマットと一致するすべてのレコードを返すことになります。
このコードは、Jupyterノートブック内でSQLマジックコマンド「%%sql」を使って実行されています。このコマンドにより、ノートブック内でSQLコードを直接実行することができます。
S-017: 顧客データ(customer)を生年月日(birth_day)で高齢順にソートし、先頭から全項目を10件表示せよ。
%%sql
SELECT * FROM customer ORDER BY birth_day LIMIT 10;
* postgresql://padawan:***@db:5432/dsdojo_db 10 rows affected.
customer_id | customer_name | gender_cd | gender | birth_day | age | postal_cd | address | application_store_cd | application_date | status_cd |
---|---|---|---|---|---|---|---|---|---|---|
CS003813000014 | 村山 菜々美 | 1 | 女性 | 1928-11-26 | 90 | 182-0007 | 東京都調布市菊野台********** | S13003 | 20160214 | 0-00000000-0 |
CS026813000004 | 吉村 朝陽 | 1 | 女性 | 1928-12-14 | 90 | 251-0043 | 神奈川県藤沢市辻堂元町********** | S14026 | 20150723 | 0-00000000-0 |
CS018811000003 | 熊沢 美里 | 1 | 女性 | 1929-01-07 | 90 | 204-0004 | 東京都清瀬市野塩********** | S13018 | 20150403 | 0-00000000-0 |
CS027803000004 | 内村 拓郎 | 0 | 男性 | 1929-01-12 | 90 | 251-0031 | 神奈川県藤沢市鵠沼藤が谷********** | S14027 | 20151227 | 0-00000000-0 |
CS013801000003 | 天野 拓郎 | 0 | 男性 | 1929-01-15 | 90 | 274-0824 | 千葉県船橋市前原東********** | S12013 | 20160120 | 0-00000000-0 |
CS001814000022 | 鶴田 里穂 | 1 | 女性 | 1929-01-28 | 90 | 144-0045 | 東京都大田区南六郷********** | S13001 | 20161012 | A-20090415-7 |
CS016815000002 | 山元 美紀 | 1 | 女性 | 1929-02-22 | 90 | 184-0005 | 東京都小金井市桜町********** | S13016 | 20150629 | C-20090923-C |
CS009815000003 | 中田 里穂 | 1 | 女性 | 1929-04-08 | 89 | 154-0014 | 東京都世田谷区新町********** | S13009 | 20150421 | D-20091021-E |
CS012813000013 | 宇野 南朋 | 1 | 女性 | 1929-04-09 | 89 | 231-0806 | 神奈川県横浜市中区本牧町********** | S14012 | 20150712 | 0-00000000-0 |
CS005813000015 | 金谷 恵梨香 | 1 | 女性 | 1929-04-09 | 89 | 165-0032 | 東京都中野区鷺宮********** | S13005 | 20150506 | 0-00000000-0 |
解説:
このコードはSQL言語で書かれており、データベースへの問い合わせを行っています。
SELECT文を使用して、"customer "テーブルからすべてのカラムを選択しています。
ORDER BY句を使用して、"birth_day "カラムに基づく昇順でデータをソートしています。
LIMIT 句は、返されるレコードの数を 10 に制限するために使用されます。
つまり、このクエリーは、「customer」テーブルから、「birth_day」カラムに基づいて昇順にデータをソートすると、最初の10レコードを返すことになります。
このコードは、Jupyterノートブック内でSQLマジックコマンド「%%sql」を使って実行されています。このコマンドにより、SQLコードをノートブック内で直接実行することができます。
S-018: 顧客データ(customer)を生年月日(birth_day)で若い順にソートし、先頭から全項目を10件表示せよ。
%%sql
SELECT * FROM customer ORDER BY birth_day DESC LIMIT 10;
* postgresql://padawan:***@db:5432/dsdojo_db 10 rows affected.
customer_id | customer_name | gender_cd | gender | birth_day | age | postal_cd | address | application_store_cd | application_date | status_cd |
---|---|---|---|---|---|---|---|---|---|---|
CS035114000004 | 大村 美里 | 1 | 女性 | 2007-11-25 | 11 | 156-0053 | 東京都世田谷区桜********** | S13035 | 20150619 | 6-20091205-6 |
CS022103000002 | 福山 はじめ | 9 | 不明 | 2007-10-02 | 11 | 249-0006 | 神奈川県逗子市逗子********** | S14022 | 20160909 | 0-00000000-0 |
CS002113000009 | 柴田 真悠子 | 1 | 女性 | 2007-09-17 | 11 | 184-0014 | 東京都小金井市貫井南町********** | S13002 | 20160304 | 0-00000000-0 |
CS004115000014 | 松井 京子 | 1 | 女性 | 2007-08-09 | 11 | 165-0031 | 東京都中野区上鷺宮********** | S13004 | 20161120 | 1-20081231-1 |
CS002114000010 | 山内 遥 | 1 | 女性 | 2007-06-03 | 11 | 184-0015 | 東京都小金井市貫井北町********** | S13002 | 20160920 | 6-20100510-1 |
CS025115000002 | 小柳 夏希 | 1 | 女性 | 2007-04-18 | 11 | 245-0018 | 神奈川県横浜市泉区上飯田町********** | S14025 | 20160116 | D-20100913-D |
CS002113000025 | 広末 まなみ | 1 | 女性 | 2007-03-30 | 12 | 184-0015 | 東京都小金井市貫井北町********** | S13002 | 20171030 | 0-00000000-0 |
CS033112000003 | 長野 美紀 | 1 | 女性 | 2007-03-22 | 12 | 245-0051 | 神奈川県横浜市戸塚区名瀬町********** | S14033 | 20150606 | 0-00000000-0 |
CS007115000006 | 福岡 瞬 | 1 | 女性 | 2007-03-10 | 12 | 285-0845 | 千葉県佐倉市西志津********** | S12007 | 20151118 | F-20101016-F |
CS014113000008 | 矢口 莉緒 | 1 | 女性 | 2007-03-05 | 12 | 260-0041 | 千葉県千葉市中央区東千葉********** | S12014 | 20150622 | 3-20091108-6 |
解説:
このコードはSQL言語で書かれており、データベースへの問い合わせを行っています。
このクエリは、SELECT文を使用して、"customer "テーブルからすべてのカラムを選択しています。
ORDER BY句を使用して、"birth_day "カラムに基づく降順でデータをソートしています。
LIMIT 句は、返されるレコードの数を 10 に制限するために使用されます。
つまり、このクエリは、「customer」テーブルから、「birth_day」カラムに基づいて降順にデータをソートすると、最初の10レコードを返すことになります。
このコードは、Jupyterノートブック内でSQLマジックコマンド「%%sql」を使って実行されています。このコマンドにより、SQLコードをノートブック内で直接実行することができます。
S-019: レシート明細データ(receipt)に対し、1件あたりの売上金額(amount)が高い順にランクを付与し、先頭から10件表示せよ。項目は顧客ID(customer_id)、売上金額(amount)、付与したランクを表示させること。なお、売上金額(amount)が等しい場合は同一順位を付与するものとする。
%%sql
SELECT
customer_id,
amount,
RANK() OVER(ORDER BY amount DESC) AS ranking
FROM receipt
LIMIT 10
;
* postgresql://padawan:***@db:5432/dsdojo_db 10 rows affected.
customer_id | amount | ranking |
---|---|---|
CS011415000006 | 10925 | 1 |
ZZ000000000000 | 6800 | 2 |
CS028605000002 | 5780 | 3 |
ZZ000000000000 | 5480 | 4 |
ZZ000000000000 | 5480 | 4 |
CS015515000034 | 5480 | 4 |
ZZ000000000000 | 5440 | 7 |
CS021515000089 | 5440 | 7 |
CS020414000081 | 5280 | 9 |
ZZ000000000000 | 5280 | 9 |
解説:
このコードはSQL言語で書かれており、データベースへの問い合わせを行っています。
クエリは、"receipt "テーブルから "customer_id "と "amount "のカラムを選択しています。
また、RANK()というウィンドウ関数を使用して、"amount "カラムに基づく各レコードのランキングを計算しています。RANK()関数は、等しい値には同じランクを割り当て、等しくない値にはランク間に隙間を空けて、各レコードのランクを計算する。ウィンドウ関数は OVER() 句を使用して定義され、ランキングを適用する順序と、パーティションまたはフィルタリングの基準を指定する。
クエリは ORDER BY 句を使用して、"amount" 列に基づく降順でデータを並べます。
このクエリでは、ASキーワードを使用して、RANK()関数の結果を「ランキング」として別名化しています。
LIMIT句は、返されるレコードの数を10に制限するために使用されています。
つまり、このクエリーは「receipt」テーブルから最初の10レコードを返すことになり、各レコードには「customer_id」「amount」「ranking」カラムが含まれる。ranking」カラムには、「amount」カラムに基づく各レコードのランキングが記載され、最も高い金額を持つレコードのランキングは1です。
このコードは、Jupyterノートブック内でSQLマジックコマンド「%%sql」を使って実行されています。このコマンドにより、ノートブック内でSQLコードを直接実行することができます。
S-020: レシート明細データ(receipt)に対し、1件あたりの売上金額(amount)が高い順にランクを付与し、先頭から10件表示せよ。項目は顧客ID(customer_id)、売上金額(amount)、付与したランクを表示させること。なお、売上金額(amount)が等しい場合でも別順位を付与すること。
%%sql
SELECT
customer_id,
amount,
ROW_NUMBER() OVER(ORDER BY amount DESC) AS ranking
FROM receipt
LIMIT 10
;
* postgresql://padawan:***@db:5432/dsdojo_db 10 rows affected.
customer_id | amount | ranking |
---|---|---|
CS011415000006 | 10925 | 1 |
ZZ000000000000 | 6800 | 2 |
CS028605000002 | 5780 | 3 |
ZZ000000000000 | 5480 | 4 |
CS015515000034 | 5480 | 5 |
ZZ000000000000 | 5480 | 6 |
ZZ000000000000 | 5440 | 7 |
CS021515000089 | 5440 | 8 |
CS001412000160 | 5280 | 9 |
CS020515000102 | 5280 | 10 |
解説:
このコードは、Jupyterノートブックでマジックコマンド"%%sql "を使って実行されるSQLクエリです。
このクエリは、"recipate "テーブルから3つのカラムを選択します。「customer_id"、"amount"、そして新しいカラム "ranking "です。customer_id」と「amount」カラムは単純で、これら2つのフィールドの値を取得するだけです。ranking」カラムは、ROW_NUMBER()というウィンドウ関数を使用して作成された派生カラムです。
ROW_NUMBER()関数は、指定されたORDER BY句に基づいて、結果セット内の各行に対して一意の連番を生成します。この場合、この関数は、「金額」列の値に基づいて各行にランクを割り当てるために使用されています。ORDER BY句は、「amount」カラムに基づいて行を降順に並べるので、最も高い金額がランク1、2番目に高い金額がランク2、といった具合になります。
ASキーワードは、新しいカラムに "ranking "というエイリアスを与えるために使用されています。
最後に、LIMIT句を使用して、クエリが返す行の数を10行に制限しています。
したがって、このクエリの結果は、"customer_id"、"amount"、"ranking "のカラムを持つ "recipate "テーブルの上位10行になります。ranking」カラムには、「amount」カラムの順序に基づいて各行に割り当てられた連番が含まれ、最高額のものは「ranking 1」となります。
Comment