まぐまぐ!メルマガ<素人でもできたデータ処理の技>
戻る
 第1号 2005/04/17
 第2号 2005/05/06
 第3号 2005/05/15
 第4号 2005/05/24
 第5号 2005/06/13
 第6号 2005/07/03
 第7号 2005/07/18
 第8号 2005/08/17
 第9号 2005/08/18
 第10号 2005/08/22
 第11号 2005/09/10
 第12号 2005/09/13
 第13号 2005/09/28
 第14号 2005/11/04
 第15号 2005/12/25
 第16号 2006/04/19
 第17号 2006/04/26

<EXCEL>
 1.ピボットテーブル
 2.ピボットテーブルのエラー対処方法

当サイトの情報をご利用になる場合は、全て自己責任でお願いします
第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文を打つくらいに
なりました。

次回は、リレーション機能を紹介させて頂きます。

************************************************************************
Copyright©2004 Sing-Ken-Ken.com All Right Reserved. info@sing-ken-ken.com