<EXCEL>
当サイトの情報をご利用になる場合は、全て自己責任でお願いします |
| 第8号 2005/08/17 |
<MySQL編 第4回目>
今回は、SELECT文でデータを集計する方法を紹介します。
データを集計するには、データを抽出して並べ替える基本的なSELECT文に対して
赤文字の文で指示します。
SELECT (フィールド名),(フィールド名),,,
FROM (テーブル名)
WHERE (検索条件) ←集計前の検索条件
GROUP BY (フィールド名) ,(フィールド名) ,,, ←集計キー
HAVING (検索条件) ←集計後の検索条件
ORDER BY (フィールド名) 並び順,(フィールド名) 並び順,,,
で、検索条件は、前回のメルマガを見ていただくとして、
集計キーで集計をするときによく使う関数は
AVG(フィールド名) 平均
COUNT(フィールド名) データ数
MIN(フィールド名) 最小値
MAX(フィールド名) 最大値
SUM(フィールド名) 合計
です。
ところで、WHEREとHAVINGについてですが、なぜ、2つあるのでしょうか?
「同じ条件ならば、WHEREの方が先に件数を絞ることが出来るので、処理的にも
有利なのでHAVINGは不要なのではないか。」と思ってしまいます。
実は、HAVINGは集計した結果の値に対して使用します。つまり、WHERE文で抽出
したデータをGROUP BY で集計し、その集計した値が例えば10,000円以上の物を抽
出する場合に使用します。
<例>
SELECT ymd, chiku, SUM(kingaku)
FROM uriage
WHERE chiku='T'
GROUP BY ymd, chiku
HAVING SUM(kingaku)>=10000
ORDER BY chiku, ymd
当然ですが、前回のメルマガと同じように、今回のSELECT文を使用して
INSERT文やREPLACE文でテーブルやテンポラリーテーブルにデータを追加できます。
************************************************************************
<編集後記>
前回から1ヶ月も間が空いてしまい申し訳ございませんでした。忙しいという個
人的な事情が原因なのですが、もう一つの原因として、普段何気なく使っている
SELECT文の説明が、やってみると非常に難しかったことがあります。
思い起こすと、MySQLを使い始めた頃はSELECT文に相当苦労したのを思い出しまし
た。特に、苦労したのはGROUP BYやWHERE文の順番はバラバラでも良いと思いこん
でいたことで、順番が原因だと気づくのに数日かかったことです。
(MySQLを含むSQLのサーバーにはSQL文を最適化してから実行する機能があり、
その機能が順番も直してくれると思っていたのです。)
苦労の甲斐あって、いまでは、考えるよりも早く手が勝手にSQL文を打つくらいに
なりました。
次回は、リレーション機能を紹介させて頂きます。
************************************************************************
|
|