0
0

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 3 years have passed since last update.

「達人に学ぶSQL徹底指南書」の演習問題 4-3を解いてブラウザで動作確認してみた

Posted at

この記事の概要

  • この記事は「達人に学ぶSQL徹底指南書/ミック著」の演習問題をブラウザのSQL実行環境(db-fiddle.com)で動かしてみたというものになります。
  • 解説は書籍の方を参照してください。
  • カラム名がアルファベット表記になっていることに注意してください

db-fiddle.comの使い方

  • テーブルの作成: Scheme SQLの欄にCREATE TABLEを書いてテーブルを作成
  • データの挿入: Query SQLの欄にINSERT文を書いてデモデータを挿入する
  • データの検索: Query SQLの欄にSELCT文を書く

問題文

「『関係除算でバスケット解析』(p73)では、条件を店舗だけを結果として選択しました。
しかし、要件によっては、品物を全て揃えていなかった店舗についても『どれぐらいの品物が不足していたのか』
を一覧表示したいこともあるでしょう。
 そこで、先の関係除算のクエリを、次のように全店舗について結果を一覧表示するよう変更してください。my_item_cntは店舗の現在在庫数、
diff_cntは、足りなかった商品の数を表しています。」

  • 出典: p80, 達人に学ぶSQL徹底指南書, 第1版

データセットの準備

  • Schema SQL
CREATE TABLE Items(
  item varchar(255) NOT NULL 
);

CREATE TABLE ShopItems(
  shop varchar(255) NOT NULL, 
  item varchar(255) NOT NULL 
);
  • Query SQL
INSERT INTO Items VALUES 
('beer'),
('omutu'),
('bicycle');

INSERT INTO ShopItems VALUES 
('sendai', 'beer'),
('sendai', 'omutu'),
('sendai', 'bicycle'),
('sendai', 'curtail'),
('tokyo', 'beer'),
('tokyo', 'omutu'),
('tokyo', 'bicycle'),
('osaka', 'TV'),
('osaka', 'omutu'),
('osaka', 'bicycle');

解答

詳しい解説は書籍を参照してください。


SELECT 
  SI.shop, 
  COUNT(*) AS my_item_cnt,
  (SELECT COUNT(item) FROM Items) - COUNT(SI.item) AS diff_cnt
FROM ShopItems SI, Items I
WHERE SI.item = I.item
GROUP BY SI.shop;

0
0
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
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?