HOME/🔍 BigQuery/

🔍 100本ノック

Article Outline

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

| S-011 ★

顧客テーブル(customer)から顧客ID(customer_id)の末尾が1のものだけ全項目抽出 し、10件だけ表示せよ。

select
    *
from 
   `100knocks.customer`
where 
   regexp_contains(customer_id, r'1$')
limit 10
;

| S-012 ★

店舗テーブル(store)から横浜市の店舗だけ全項目表示せよ。

select
    *
from 
   `100knocks.store`
where 
   address like '%横浜市%'
;

| S-013 ★★

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

select
    *
from
   `100knocks.customer`
where
    regexp_contains(customer_id, r'^(A|B|C|D|E|F)')
    -- regexp_contains(customer_id, r'^(A-F)') -- 別解
    --    customer_id like 'A%'
    -- or customer_id like 'B%'
    -- or customer_id like 'C%'
    -- or customer_id like 'D%'
    -- or customer_id like 'E%'
    -- or customer_id like 'F%' -- 別解
limit 10
;

Cf. BigQueryでLIKE文の複数条件指定をORから正規表現に直す - Qiita

| S-014 ★★

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

select
    *
from 
   `100knocks.customer`
where
    regexp_contains(status_cd, r'[1-9]$')
limit 10
;

| S-015 ★★

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

select
    *
from 
   `100knocks.customer`
where
    regexp_contains(status_cd, r'^(A-F)-\d+-[1-9]$')
limit 10
;

Cf. 基本的な正規表現一覧 - murashun.jp

| S-016 ★★

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

select
    *
from 
    `100knocks.store`
where 
    regexp_contains(tel_no, r'\d{3}-\d{3}-\d{4}')
;

| S-017 ★

顧客テーブル(customer)を生年月日(birth_day)で高齢順にソートし、先頭10件を全項目表示せよ。

select
    *
from 
   `100knocks.customer`
order by 
   birth_day
limit 10
;

| S-018 ★

顧客テーブル(customer)を生年月日(birth_day)で若い順にソートし、先頭10件を全 項目表示せよ。

select
    *
from 
   `100knocks.customer`
order by 
   birth_day desc
limit 10
;

| S-019 ★★

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

select
    customer_id
    , amount
    , rank() over (order by amount desc) as ranking
from 
   `100knocks.receipt`
order by 
   ranking
limit 10
;

| S-020 ★★

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

select
    customer_id
    , amount
    , dense_rank() over (order by amount desc) as ranking -- row_number()別解
from 
   `100knocks.receipt`
order by 
   ranking
limit 10
;

Cf. 【BIGQUERY】分析入門 - SECTION7- .tk