【ACCESS SQL】SQL文で、グループ化後の集計をする
YouTubeでも紹介しています。是非ご覧ください。
ACCESSを、勉強して、真っ先に感動したのは、データをグループ化できるということです。
Excelでもできますが、私は、イマイチExcelのグループ化は理解できていません。
ACCESSのグループ化は、それだけカンタンということです。
SQL文で、グループ化後の集計をする
こんにちは。伊川(@naonaoke)です。
前回は、SQL文で、テーブルとテーブルをつなげるということをしました。
SQLを勉強していて、思うのは、もっと、早い段階でSQLを勉強しておけばよかったと思います。
デザインビューで、クエリを作成するよりも、SQL文で実行する方が、はるかにイメージが沸くからです。
ACCESSというアプリは、帯に短し、タスキに長しというイメージがありました。
しかし、様々な世界への入り口を見せてくれたような気がします。
特に、SQLに関してだけでも、ACCESSを使って勉強すべきでしょう。
今回は、グループ化に集計をします。
ここも、SQLを利用するには、重要な事柄になります。
このブログはこんな人にお勧め
ACCESSでクエリを勉強している人
高度なクエリを書きたい人
SQL文を勉強している人
このブログを、読み終わるころには・・・・
ACCESSには、グループ化と言っても様々なグループ化の方法があります。
このグループ化を理解することで、より、高度な集計ができるようになります。
SELECT文が、解釈される順序
上記のように解釈されます。
SELECT dep_id, AVG(salary) dep_id列とsalary列の平均値を取得して、
FROM MT_Empoyee MT_Empoyee表から、
WHERE gender = '男' gender列が「男」の行を抽出して
GROUP BY dep_id dep_id列でグループ化して
HAVING AVG(salary) >= 300000 salary列の平均値が30万円以上のデータを抽出して、
ORDER BY AVG(salary) DESC; salary列の平均値の大きい順に整列せよ
VBAと違って、個性が出にくいコード、文法ですようね。
個性がないということは、初心者でも、一定のルールに従えば、だれでも、同じ結果がでます。
グループ化後の集計 作業手順 その1 HAVING句
HAVINGは、持っているの進行形ですね。
つまり、該当しているというニュアンスです。
salary列の平均値が30万円以上という条件で、dep_id列およびsalary列の平均値を求めよ
レコード件数が2以上という条件で、それに該当するdep_id列とレコード件数を求めよ
ROUP BYで、グループ化されたデータの集計は、WHERE句は利用しません。
WHERE句は、行のデータを抽出するのに利用します。
HAVING句は、グループのデータを抽出する条件を指定します。
この両者の決定的な違いは、HAVING句は、集計関数が利用できす。
つまり、FROM句の後で、GROUP BYされていることから、SELECT句で、データを取得する前に、すでに、データを取得しているからです。
よって、HAVING句は、GROUP BYの後ろに記載します。
グループ化後の集計 作業手順 その2 複雑なグループ集計をする
クエリは、複雑になれば、複雑になれるほど、難しくなると思いがちです。
部署ごとに、グループ分けして、それぞれの部署の最高額の給料をもらっていえる社員の名前と給料を取得する
このようなクエリを作成します。
デザインビューで確認すると下記のようになります。
ところで、テーブルE1って、どこからきたのでしょうか?
SELECT dep_id, name, salary FROM MT_Empoyee AS E1
上記のクエリを実行すると、下記のようになります。
ここのE1が、テーブルです。
複数のテーブルを参照するときや、別名を設定することで、SQL文の記述する量が短くなります。
このE1は、メインクエリで参照します。
SELECT MAX(salary) FROM MT_Empoyee AS E2
この部分は、サブクエリで参照します。
それがE2となります。
VBAでいうなら、変数で簡略化するようなイメージです。
このクエリのことを相関クエリといいます。
メインクエリが実行されると、サブクエリが実行され、処理されます。
このような結果になります。
各セクションで一番高いサラリーをもらった人を抽出します。
そして、条件に合うdep_idとdep_idが等しいものを抽出します。
これを相関クエリといいます。
1行ずつ、条件に合致するデータを探してきます。
グループ化後の集計 作業手順 その3 相関クエリ
性別ごとにグループ分けして、それぞれの性別で最高齢の社員の性別、名前、生年月日を取得せよ
ここがポイント
相関クエリは、遅いと言われています。
しかし、このように、複数のテーブルを参照するような場合には、テーブルをE1と置くというように変形できます。
この書き方は、他のサイトでも見たことがありません。
本当に勉強になるSQLの書き方でした。
まとめ
一応今回で、抽出系のSQLは終了します。
次回は、このSQLをVBAで実行します。
今回も最後まで読んでいただきありがとうございました。
サンプルファイル
私のホームページでも販売しています。このようなファイルは、全部で、300ファイル前後ありますが、総ダウンロード数は、10,000件を、超えました。10,000件超えてから、面倒なので、カウントしていないです。
勉強したい方、会社の実務で利用したい方にお勧めです。
はっきり言いますが、ネットで調べる時間を考えたら、購入したほうが、時間の節約になります。
まして、ネットのコードは、作動するとは限りません。
料金は、200円です。
よろしくお願いします。
ここから先は
¥ 200
Amazonギフトカード5,000円分が当たる
よろしければサポートをお願いします。いただいたお金に関しては、書籍の購入に充て、より良い情報を皆様に提供します。