SQLでは、もちろん、計算もすることもできます。
ExcelのようなSUM関数、AVEREGE関数も用意されています。
今回は、計算結果を条件として、データを抽出してみましょう。
目次
SQL文で、カンタンな計算をしてみよう
こんにちは。伊川(@naonaoke)です。
2回の渡り、SQL文の紹介をしてきました。
今回は、SQLでカンタンな計算をしながら、データを抽出してみます。
利用する関数は、カンタンな関数です。
Excelでお馴染みの関数です。
しかし、Excelと利用方法は少し違います。
まら、SQLでは利用できても、ACCESSで利用できない関数もあります。
Excelでも、ACCESSでも、SQLでも利用できる関数を紹介します。
このブログはこんな人にお勧め
- クエリの利用方法を勉強している人
- SQL文を勉強している人
- 高度なクエリを書いてみたい人
このブログを、読み終わるころには・・・・
少し、書き方が変わります。
また、SQLでは利用できるが、ACCESSで利用できない関数もありますので、その際は、別の関数を利用するしかないです。
SQLで、計算結果に基づいて、データ抽出する
今回、利用する関数は、上記の関数です。
SQLで、計算結果に基づいて、データ抽出する 作業手順 その1 カンタンな計算
salary列の合計値と平均値を求めよ
SELECT SUM(salary), AVG(salary) FROM MT_Empoyee;
このように記載します。
フィールドの名前が変ですね。
Expr1001は、フィールドに名前が、設定されていない場合や、同じ名前のフィールドをクエリで選択したときに、
ACCESSの判断で、名前がExpr1001と名前が尽きます。
デザインビューで確認します。
SELECT Sum(salary) AS 合計, Avg(salary) AS 平均
FROM MT_Empoyee;
このように記載します。
salary列の最大値と最小値を求めよ
SELECT MAX(salary) AS 最大, MIN(salary) AS 最小
FROM MT_Empoyee;
salary列がNULLであるデータを除いたレコード件数を求めよ
SELECT COUNT(salary) AS NULL含まない
FROM MT_Empoyee;
列がNULLであるデータを含めたレコード件数を求めよ
SELECT Count(*) AS NULLを含む
FROM MT_Empoyee;
Excelよりも面倒ですが、難しくないですね。
伊川の小話
この集計関数に関しては、数字のみの計算です。
例えば、誕生日の平均を取得しても意味がありません。
だから、誕生日、つまり、時刻/日時型には、別の関数が用意されています。
また、今回、四捨五入も紹介しようと思ったのですが、ROUND関数は、ACCESSでは少し違います。
Excelと、SQLでは、同じなのですが、四捨五入は、機会があればどこかで紹介します。
SQLで、計算結果に基づいて、データ抽出する 作業手順 その2 給料が平均以上の社員を抽出
別に、おかしいところはありません。
しかし、エラーになります。
SQLで、計算結果に基づいて、データ抽出する 作業手順 その3 サブクエリを使う
エラーの原因は、下記の通りです。
なので、WHERE句の中に、給料の平均以上の条件を書かなければなりません。
ちなみに、salaryの平均は、下記のように書きます。
この条件を下記のようにします。
つまり、給料の平均を、WHERE句の中に仕込みます。
メインとなるクエリの中に、再度、クエリを入れるから、サブクエリなんですね。
これを、デザインビューで確認します。
抽出条件の中に、クエリを記載します。
ここがポイント
サブクエリは、さすがに、SQL文を書かないと実行できません。
もっとも、この程度のクエリなら、デザインビューから作成できます。
しかし、キャバクラの本指名の数を、数えて、売上を決めるなんて言うのは、
サブクエリを、直書きしないとできないですね。
まとめ
今回は、カンタンな計算と、サブクエリについて紹介しました。
最近は、めっきり、SQLにハマっています。
これを極めれば、VBAよりお金になります。
今回も最後まで読んでいただきありがとうございました。
今回のサンプルファイルは、No299です。
わからない事を延々と考えるのは、無駄です。
- なんで作動かないの?
- もうやだ!VBAなんか嫌い!
- ネットで調べても情報がない!
必ず作動するコードが、ここにあります。