実データで分析する

INPUT · スライド

条件をつけて比べる

01 / 04

絞ってから数える

「1000円以上の商品はカテゴリごとに何個?」は、先に行を絞ってからまとめる。WHEREGROUP BY より先に効くよ。

書く順番も WHEREGROUP BY の並びで決まっている。

SELECT category,       COUNT(*) AS 商品数  FROM items  WHERE price >= 1000  GROUP BY category;

実行結果

そうじ | 1
ぶんぼうぐ | 1
インテリア | 1
キッチン | 2

02 / 04

数えてから絞る

いっぽう「商品が2つ以上あるカテゴリ」は、まとめたあとの数で絞る。これは HAVING の仕事だよ。

見分け方はひとつ。集計した値を条件に使うなら HAVING、1行ずつの値なら WHERE だよ。

SELECT category,       COUNT(*) AS 商品数  FROM items  GROUP BY category  HAVING COUNT(*) >= 2;

実行結果

そうじ | 2
ぶんぼうぐ | 3
キッチン | 4

03 / 04

計算した値もまとめられる

売値から仕入れ値を引けば、1個あたりのもうけ。SUMAVG計算した結果にも使えるよ。

計算した列は名前がないと読みにくいから、AS で名前を付けよう。

SELECT category,       AVG(price - cost) AS もうけ  FROM items  GROUP BY category;

実行結果

そうじ | 575
ぶんぼうぐ | 380
インテリア | 1200
キッチン | 425

04 / 04

観点を横に並べて比べる

1つのクエリに集計をいくつも並べられる。同じグループを別の物差しで見ると、判断の材料が増えるよ。

「品数は多いのに1個あたりのもうけは小さい」みたいな発見は、この形から出てくる。ここから書いてみよう。

SELECT category,       COUNT(*) AS 商品数,       AVG(price) AS 平均価格,       AVG(price - cost) AS もうけ  FROM items  GROUP BY category;

実行結果

そうじ | 2 | 1100 | 575
ぶんぼうぐ | 3 | 750 | 380
インテリア | 1 | 2400 | 1200
キッチン | 4 | 900 | 425