集める・数える

INPUT · スライド

2つの基準でまとめる

01 / 04

お店ごと、しかも日ごとに

お店ごとの合計は出せた。日ごとの合計も出せた。じゃあ「こもれび堂の初日はいくら?」はどう出す?

WHERE で2つ指定すれば1マスは出る。でもぜんぶのマスがほしい。基準を2つ重ねてまとめるんだ。

02 / 04

カンマで並べるだけ

GROUP BY のうしろに列をカンマで並べると、その組み合わせが同じ行がひとまとまりになる。

3店 × 2日なので、最大6グループ。SELECT にも両方の列を並べておくと、どのマスの値かが分かるよ。

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

実行結果

こもれび堂 | 2026-05-02 | 12
こもれび堂 | 2026-05-03 | 6
つむぎ雑貨 | 2026-05-02 | 4
つむぎ雑貨 | 2026-05-03 | 20
ゆらり工房 | 2026-05-02 | 2
ゆらり工房 | 2026-05-03 | 4

03 / 04

グループは細かくなる

基準を増やすほど1グループに入る行は少なくなり、返る行は増える。COUNT(*) を見ると、1行しか入っていないグループもあるね。

細かくしすぎると集計の意味が薄くなる。なにを比べたいかで基準の数を決めよう。

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

実行結果

こもれび堂 | 2026-05-02 | 2
こもれび堂 | 2026-05-03 | 1
つむぎ雑貨 | 2026-05-02 | 1
つむぎ雑貨 | 2026-05-03 | 2
ゆらり工房 | 2026-05-02 | 1
ゆらり工房 | 2026-05-03 | 1

04 / 04

書いた順が並びに出る

GROUP BY day, stall と順番を入れかえると、グループの中身は同じでも並びが変わる。日でまとまってから店が並ぶ形だよ。

読ませたい相手に合わせて順番を選ぼう。日報なら日が先、店の報告なら店が先だね。ここから書いてみよう。

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

実行結果

2026-05-02 | こもれび堂 | 6600
2026-05-02 | つむぎ雑貨 | 7200
2026-05-02 | ゆらり工房 | 4800
2026-05-03 | こもれび堂 | 4200
2026-05-03 | つむぎ雑貨 | 13800
2026-05-03 | ゆらり工房 | 4800