❄️

Frosty Friday Week101 - Easy Insert (Multi-table)

がく@ちゅらデータエンジニアです!

現在、Frosty Friday Live Challangeとして、最初からやっていますが、Week100到達!ってことで、最新のチャレンジもちょこちょこやっていこうかなって思ってます。

https://frostyfriday.org/blog/2024/07/05/week-100-hard/

Week101 - Easy Insert (Multi-table)

問題

Week101_Easy_Insert_multi_table

やあ、仲間!Pirate SQL チャレンジへようこそ!

あなたの使命は、悪名高い海賊とその財宝のデータを管理することです。src海賊とその略奪品の詳細を含むソース テーブルとt1、t2特定の条件に基づいてデータを挿入する 2 つの宛先テーブルの 3 つのテーブルを操作します。

  • 戦利品の量(BOOTY_AMOUNT)が 700 ユニット以上の海賊をt1のみを挿入する
  • ランクが「First Mate (一等航海士)」の海賊をt2のみ挿入する
  • 戦利品(BOOTY_AMMOUNT)が 100 未満の海賊は、両方のテーブルに挿入する
    -- 他のすべての海賊はt2のみ に挿入する
    以下の手順に従ってテーブルを作成し、条件に従ってデータを挿入します。
    この課題を解決するには、Snowflake で使用できる INSERT (マルチテーブル) の種類を確認してください。

https://docs.snowflake.com/ja/sql-reference/sql/insert-multi-table

SQL の危険な海域を航行し、真の海賊船長としての勇気を証明する際に、
風が背中を押してくれますように! チャレンジのテーマを提案してくれた同志の Niccolò のように!

※回答例が画像がありますが、あくまでも回答「例」であって、回答ではなさそうです

スタートアップコードは

スタートアップコード

-- Creating the destination tables t1 and t2
CREATE OR REPLACE TABLE t1 (
pirate_name STRING,
booty_amount NUMBER,
rank STRING,
ship_name STRING
);

CREATE OR REPLACE TABLE t2 (
pirate_name STRING,
booty_amount NUMBER,
rank STRING,
ship_name STRING
);

-- Creating the source table src with pirate-themed data
CREATE OR REPLACE TABLE src (
pirate_name STRING,
booty_amount NUMBER,
rank STRING,
ship_name STRING
);

-- Inserting data into the src table
INSERT INTO src (pirate_name, booty_amount, rank, ship_name) VALUES
('Blackbeard', 500, 'Captain', 'Queen Anne's Revenge'),
('Anne Bonny', 300, 'First Mate', 'Revenge'),
('Calico Jack', 200, 'Captain', 'Ranger'),
('Henry Morgan', 1000, 'Admiral', 'Oxford'),
('Bartholomew Roberts', 400, 'Captain', 'Royal Fortune'),
('Mary Read', 150, 'Quartermaster', 'Ranger'),
('Stede Bonnet', 50, 'Captain', 'Revenge'),
('Charles Vane', 250, 'Captain', 'Lark'),
('Jack Sparrow', 800, 'Captain', 'Black Pearl'),
('William Kidd', 600, 'Captain', 'Adventure Galley');

私の解法

https://github.com/gakut12/Frosty-Friday/blob/main/week101_easy_insert_multi_table/week101.sql

公式に回答とおもった画像が乗っていましたが、どうしても合わなくて、他の方の解法を見たらそことあっていたので、今回でOKとしました

Insert(Multi-Table)

https://docs.snowflake.com/en/sql-reference/sql/insert-multi-table

現状の業務では、dbtを使ったりするので、使うことはなさそうだなぁ〜とは思っています。

FIRSTは、CASE式と同じで、最初に合致した条件の際にテーブルへのINSERT
ALLは、条件に合致した複数のテーブルへのINSERTが入る

ってのが肝ですね

Frosty Friday Live Challenge

tomoさんと二人のメインMCでやってるYoutubeはこちら
こちらは、Week1から解説しているのでぜひ御覧ください!
コメントとか高評価もらえるととても励みになります♪

https://www.youtube.com/playlist?list=PLVj4iIZgzTAq2FzaBBgqFOtZaJTcoG3JR

ちゅらデータ株式会社

Discussion