テーブルをつなぐ

INPUT · スライド

つないでから絞る・数える

01 / 04

つないだあとは今までどおり

結合した結果は1つの大きな表だと思っていい。だから WHEREORDER BYGROUP BY も、そのまま重ねられるよ。

書く順番は FROMJOINONWHEREGROUP BYORDER BYON のうしろに今までの句が続く形だね。

SELECT items.name, orders.quantity  FROM orders  JOIN items  ON orders.item_id = items.id  WHERE items.category = '食卓'  ORDER BY orders.quantity DESC;

実行結果

まめのコースター | 6
あさひ色のマグ | 4
あさひ色のマグ | 3
まめのコースター | 3
ひのきの箸置き | 2
ひのきの箸置き | 2

02 / 04

2つの表の列で計算する

結合すると、別々の表にあった値をかけ算できる。値段は items、個数は orders にあるから、つなぐまでは売上を出せなかったんだ。

計算した列には AS で名前を付けておこう。ORDER BY でもその名前が使えるよ。

SELECT items.name,  items.price * orders.quantity    AS amount  FROM orders  JOIN items  ON orders.item_id = items.id  ORDER BY amount DESC;

実行結果

あさひ色のマグ | 6400
あさひ色のマグ | 4800
こもれびランプ | 3800
まめのコースター | 1560
わたのふきん | 1360
ひのきの箸置き | 960
ひのきの箸置き | 960
まめのコースター | 780
わたのふきん | 680

03 / 04

名前でまとめる

GROUP BYitems.name を渡せば、商品名ごとにまとめられる。前は item_id でしかまとめられなかったから、結果がぐっと読みやすくなったね。

集計する列は orders 側、まとめる列は items 側。表をまたいでも GROUP BY の使い方は同じだよ。

SELECT items.name,  SUM(orders.quantity) AS total  FROM orders  JOIN items  ON orders.item_id = items.id  GROUP BY items.name  ORDER BY total DESC;

実行結果

まめのコースター | 9
あさひ色のマグ | 7
わたのふきん | 6
ひのきの箸置き | 4
こもれびランプ | 1

04 / 04

売上を種類ごとに出す

かけ算と GROUP BY を合わせると、種類ごとの売上が出る。ここまで来ると、もうお店の会議で使える表だよ。

注意して見てほしいのは、「かざり」が結果に出てこないこと。花びんは一度も注文されていないから、結合で消えてしまうんだ。ここから書いてみよう。

SELECT items.category,  SUM(items.price * orders.quantity)    AS sales  FROM orders  JOIN items  ON orders.item_id = items.id  GROUP BY items.category  ORDER BY sales DESC;

実行結果

食卓 | 15460
あかり | 3800
キッチン | 2040