0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

SQLでデータサイエンス100本ノック(記録)1~20

Last updated at Posted at 2023-04-26

一般社団法人データサイエンティスト協会が公開している、
「データサイエンス100本ノック(構造化データ加工編)」を実践したので記録として残します。

問題

問1

S-001: レシート明細データ(receipt)から全項目の先頭10件を表示し、どのようなデータを保有しているか目視で確認せよ。

SELECT * FROM receipt LIMIT 10

問2

S-002: レシート明細データ(receipt)から売上年月日(sales_ymd)、顧客ID(customer_id)、商品コード(product_cd)、売上金額(amount)の順に列を指定し、10件表示せよ。

SELECT sales_ymd , customer_id , product_cd , amount FROM receipt LIMIT 10

問3

S-003: レシート明細データ(receipt)から売上年月日(sales_ymd)、顧客ID(customer_id)、商品コード(product_cd)、売上金額(amount)の順に列を指定し、10件表示せよ。ただし、sales_ymdsales_dateに項目名を変更しながら抽出すること。

SELECT sales_ymd as sales_ymdsales_date , customer_id , product_cd ,
amount FROM receipt LIMIT 10 

問4 

S-004: レシート明細データ(receipt)から売上日(sales_ymd)、顧客ID(customer_id)、商品コード(product_cd)、売上金額(amount)の順に列を指定し、以下の条件を満たすデータを抽出せよ。
• 顧客ID(customer_id)が"CS018205000001"

SELECT sales_ymd as sales_date, customer_id, product_cd, amount
FROM receipt
WHERE customer_id = 'CS018205000001'

問5 

S-005: レシート明細データ(receipt)から売上日(sales_ymd)、顧客ID(customer_id)、商品コード(product_cd)、売上金額(amount)の順に列を指定し、以下の全ての条件を満たすデータを抽出せよ。
・顧客ID(customer_id)が"CS018205000001"
・売上金額(amount)が1,000以上

SELECT sales_ymd , customer_id, product_cd, amount
FROM receipt
WHERE customer_id = 'CS018205000001' AND amount >= 1000

問6 

S-006: レシート明細データ(receipt)から売上日(sales_ymd)、顧客ID(customer_id)、商品コード(product_cd)、売上数量(quantity)、売上金額(amount)の順に列を指定し、以下の全ての条件を満たすデータを抽出せよ。
・顧客ID(customer_id)が"CS018205000001"
・売上金額(amount)が1,000以上または売上数量(quantity)が5以上

SELECT sales_ymd , customer_id , product_cd , quantity , amount 
FROM receipt
WHERE customer_id = 'CS018205000001' AND (amount >= 1000 OR quantity >= 5)

問7 

S-007: レシート明細データ(receipt)から売上日(sales_ymd)、顧客ID(customer_id)、商品コード(product_cd)、売上金額(amount)の順に列を指定し、以下の全ての条件を満たすデータを抽出せよ。
・顧客ID(customer_id)が"CS018205000001"
・売上金額(amount)が1,000以上2,000以下

SELECT sales_ymd, customer_id, product_cd, amount
FROM receipt
WHERE customer_id = 'CS018205000001' AND amount BETWEEN 1000 AND 2000

問8 

S-008: レシート明細データ(receipt)から売上日(sales_ymd)、顧客ID(customer_id)、商品コード(product_cd)、売上金額(amount)の順に列を指定し、以下の全ての条件を満たすデータを抽出せよ。
・顧客ID(customer_id)が"CS018205000001"
・商品コード(product_cd)が"P071401019"以外

SELECT sales_ymd, customer_id, product_cd, amount
FROM receipt
WHERE customer_id = 'CS018205000001' AND product_cd != 'P071401019'

問9 

S-009: 以下の処理において、出力結果を変えずにORをANDに書き換えよ。
SELECT * FROM store WHERE NOT (prefecture_cd = '13' OR floor_area > 900)

SELECT * FROM store WHERE prefecture_cd != '13' AND floor_area <= 900

問10 

S-010: 店舗データ(store)から、店舗コード(store_cd)が"S14"で始まるものだけ全項目抽出し、10件表示せよ。

SELECT * FROM store WHERE store_cd LIKE 'S14%' LIMIT 10;

問11 

S-011: 顧客データ(customer)から顧客ID(customer_id)の末尾が1のものだけ全項目抽出し、10件表示せよ。

SELECT * FROM customer WHERE customer_id LIKE '%1' LIMIT 10

問12 

S-012: 店舗データ(store)から、住所 (address) に"横浜市"が含まれるものだけ
全項目表示せよ。

SELECT * FROM store WHERE address LIKE '%横浜市%'

問13 

S-013: 顧客データ(customer)から、ステータスコード(status_cd)の先頭がアルファベットのA〜Fで始まるデータを全項目抽出し、10件表示せよ。

SELECT * FROM customer WHERE status_cd ~ '^[A:F]' LIMIT 10

問14 

S-014: 顧客データ(customer)から、ステータスコード(status_cd)の末尾が数字の1〜9で終わるデータを全項目抽出し、10件表示せよ。

SELECT * FROM customer WHERE status_cd ~ '[1-9]$' LIMIT 10

問15 

S-015: 顧客データ(customer)から、ステータスコード(status_cd)の先頭がアルファベットのA〜Fで始まり、末尾が数字の1〜9で終わるデータを全項目抽出し、10件表示せよ。

SELECT * FROM customer WHERE status_cd ~ '^[A:F].*[1-9]$' LIMIT 10

問16 

S-016: 店舗データ(store)から、電話番号(tel_no)が3桁-3桁-4桁のデータを全項目表示せよ。

SELECT * FROM store WHERE tel_no ~ '^[0-9]{3}-[0-9]{3}-[0-9]{4}$'

問17 

S-017: 顧客データ(customer)を生年月日(birth_day)で高齢順にソートし、先頭から全項目を10件表示せよ。

SELECT * FROM customer ORDER BY birth_day ASC LIMIT 10

問18 

S-018: 顧客データ(customer)を生年月日(birth_day)で若い順にソートし、先頭から全項目を10件表示せよ。

SELECT * FROM customer ORDER BY birth_day DESC LIMIT 10

問19 

S-019: レシート明細データ(receipt)に対し、1件あたりの売上金額(amount)が高い順にランクを付与し、先頭から10件表示せよ。項目は顧客ID(customer_id)、売上金額(amount)、付与したランクを表示させること。なお、売上金額(amount)が等しい場合は同一順位を付与するものとする。

SELECT customer_id, amount, RANK() OVER(ORDER BY amount DESC) AS ranking
FROM receipt
LIMIT 10

問20 

S-020: レシート明細データ(receipt)に対し、1件あたりの売上金額(amount)が高い順にランクを付与し、先頭から10件表示せよ。項目は顧客ID(customer_id)、売上金額(amount)、付与したランクを表示させること。なお、売上金額(amount)が等しい場合でも別順位を付与すること。

SELECT customer_id , amount , ROW_NUMBER() OVER(ORDER BY amount DESC) AS ranking
FROM receipt LIMIT 10;
0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?