HOME/🔍 BigQuery/

🔍 100本ノック

Article Outline

|| データサイエンス100本ノック(構造化データ加工編) SQL編

| S-001 ★

レシート明細テーブル(receipt)から全項目を10件抽出し、どのようなデータを保有して いるか目視で確認せよ。

select * from `100knocks.receipt` limit 10;

| S-002 ★

レシート明細のテーブル(receipt)から売上日(sales_ymd)、顧客ID (customer_id)、商品コード(product_cd)、売上金額(amount)の順に列を指定し、 10件表示させよ。

select
    sales_ymd
    , customer_id
    , product_cd
    , amount
from 
    `100knocks.receipt`
limit 10
;

|S-003 ★

レシート明細のテーブル(receipt)から売上日(sales_ymd)、顧客ID (customer_id)、商品コード(product_cd)、売上金額(amount)の順に列を指定し、10件表示させよ。ただし、sales_ymdはsales_dateに項目名を変更しながら抽出するこ と。

select
    sales_ymd as sales_date
    , customer_id
    , product_cd
    , amount
from 
    `100knocks.receipt`
limit 10
;

| S-004 ★

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

  • 顧客ID(customer_id)が"CS018205000001"
select
    sales_ymd
    , customer_id
    , product_cd
    , amount
from 
    `100knocks.receipt`
where   
    customer_id = 'CS018205000001'
;

| 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 
    `100knocks.receipt`
where
        customer_id = 'CS018205000001'
    and 1000 <= amount
;

| 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 
    `100knocks.receipt`
where
        customer_id = 'CS018205000001'
    and (1000 <= amount or 5 <= quantity)
;

| 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 
    `100knocks.receipt`
where
        customer_id = 'CS018205000001'
    and amount between 1000 and 2000
;

| 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 
    `100knocks.receipt`
where
        customer_id = 'CS018205000001'
    and product_cd <> 'P071401019'
;

| S-009 ★

以下の処理において、出力結果を変えずにORをANDに書き換えよ。

select * from store where not (prefecture_cd = '13' or floor_area > 900)

select
    *
from 
    `100knocks.store`
where
        prefecture_cd <> 13
    and floor_area < 900
;

| S-010 ★

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

select
    *
from 
    `100knocks.store`
where 
    store_cd like 'S14%'
    -- where regexp_contains(store_cd, r'^S14') #別解
limit 10
;