いや、ほんとに初心者レベルで。
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において)
コメント