スポンサーリンク

【access/SQL】GROUP BY 句 ORDER BY 句で関数式を使う方法

SQL
btr
スポンサーリンク
※当サイトは広告を含みます

いや、ほんとに初心者レベルで。

accessでSQLでGROUP BY の後ろで関数式を使おうと思ったら「違います」「知りません」「何をしたいのかわかりません」的な怒られメッセージが出まくって、accessさんが受け付けてくれなかった。ひとまず会社ではあきらめて(エクセルに吐き出して集計した。。。)家で再挑戦。

以下のサンプルで

入店が〇時台の人が何人とか、購入個数が何個とかを集計したいと思っている。

〇時台は HOUR(入店) AS 時間帯 で出力。

この項目「時間帯」で集計したい。

正解はこれ

SELECT HOUR(入店) AS 時間帯, SUM(購入個数) AS 購入個数計
FROM T入出店記録
GROUP BY HOUR(入店);

だめなのはこれら
GROUP BY HOUR(入店) AS 時間帯; … 別名を付けたらASってなんやと怒られた

GROUP BY 時間帯; … SELECT句で「時間帯」と別名をつけたのでそれが使えるかと思ったら使えなかった(MySQLやPostgreSQLでは使えるようです)

ちなみにORDER BY 句も同様でした。

別名は使用できず、関数そのものをORDER BY 句の後ろに指定。

SELECT HOUR(入店) AS 時間帯,
SUM(購入個数) AS 購入個数計
FROM T入出店記録
GROUP BY HOUR(入店)
ORDER BY SUM(購入個数);

もうちょっと複雑な式でやってみた。

時間帯を11時までが「朝」、11時~14時が「昼」、14時以降が「夕方」として集計。

SELECT
SWITCH(HOUR(入店)<11,”朝”,
HOUR(入店)<14,”昼”,
HOUR(入店)>=14,”夕方”) AS 時間帯,
SUM(購入個数) AS 購入個数計
FROM T入出店記録
GROUP BY
SWITCH(HOUR(入店)<11,”朝”,
HOUR(入店)<14,”昼”,
HOUR(入店)>=14,”夕方”);

めんどっぽくて見にくいけど、関数はコピペすればいいしね。そうめんどくない。

結論

GROUP BY、ORDER BY 句の後ろには関数式をそのまま指定。別名は使えません、ということでした。(accessSQLにおいて)

スポンサーリンク
スポンサーリンク
SQL
スポンサーリンク
mwkをフォローする
エクセルがともだち

コメント

タイトルとURLをコピーしました