集める・数える

INPUT · スライド

グループごとに集計する

01 / 05

3回実行するのは変

前のレッスンでは、お店ごとの合計を出すのに WHERE でお店を1つ指定していた。3店あれば3回、100店あれば100回実行することになる。

おかしいよね。まとめて1回で出す書き方があるんだ。

02 / 05

`GROUP BY` の形

GROUP BY 列名 を足すと、その列が同じ値の行どうしがひとまとまりになって、集計はグループごとに行われる。

読み方は「stall でまとめて、それぞれの sold を合計して」。3店ぶんの合計が1回で出たね。

SELECT stall, SUM(sold) FROM sales  GROUP BY stall;

実行結果

こもれび堂 | 18
つむぎ雑貨 | 24
ゆらり工房 | 6

03 / 05

返る行数はグループの数

集計関数だけのときは1行だったけれど、GROUP BY を付けるとグループの数だけ行が返る

そして SELECT には、GROUP BY に書いた列と集計関数を並べられる。この2種類なら安心してまぜていいんだ。

SELECT stall, COUNT(*) FROM sales  GROUP BY stall;

実行結果

こもれび堂 | 3
つむぎ雑貨 | 3
ゆらり工房 | 2

04 / 05

どの集計関数でも使える

SUM だけの話じゃない。AVG COUNT MAX MIN も同じようにグループごとに計算される。

下の例は、お店ごとの平均単価。品ぞろえの高さがひと目で比べられるようになったよ。

SELECT stall, AVG(price) FROM sales  GROUP BY stall;

実行結果

こもれび堂 | 700
つむぎ雑貨 | 1100
ゆらり工房 | 1800

05 / 05

集計した値で並べ替える

ORDER BY に集計関数を書けば、集計した結果の順に並べられる。売れた数の多い順にすればランキングだよ。

書く順番は FROMGROUP BYORDER BY。ここから書いてみよう。

SELECT stall, SUM(sold) FROM sales  GROUP BY stall  ORDER BY SUM(sold) DESC;

実行結果

つむぎ雑貨 | 24
こもれび堂 | 18
ゆらり工房 | 6