データベース千夜一夜第21回

データの集計(3)~集計関数とグループ化 長谷川裕行
有限会社 手國堂

DISTINCTオプション

COUNT、SUM、AVGの各関数には、引数の前に“DISTINCT”オプションを付けることができます。DISTINCTオプションは、重複した値を除外して計算を行います。


- COUNT関数とDISTINCTオプション -

DISTINCTオプションを付けると、単にレコード数を数えたり数値を合計したりするのではなく、指定したフィールドから重複する値を1つと見なして関数を実行します。例えば、テーブル「累積売上_fx」の「お客様ID」フィールドには同じ値(同じ顧客)が複数登場しますが、それらがいくつ登場しても「1つ」と見なすので、COUNT関数なら全レコード数ではなく『取引先の数』を求めることができます。

 SELECT COUNT(DISTINCT お客様ID) AS 取引先数
 FROM 累積売上_fx



- SUM、AVG関数とDISTINCTオプション -

合計を求めるSUM関数や平均を求めるAVG関数にDISTINCTオプションを付けると、重複する値を1件としてから合計や平均を計算します。例えば、「点数」フィールドに

 90 50 60 80 60

という値が入っていた場合、

 SUM(点数)

とすれば結果は「340」となりますが、

 SUM(DISTINCT 点数)

とすると、重複する値「60」を1件と見なして「280」という値が返ってきます。

一般的な業務処理では「重複する値を対象としない計算」をする機会はまずないと思いますが、例えば、点数や販売額で順位を付ける処理の中で、同点・同順位のレコードを対象外とするような場合に用いられます。


あとがき

集計関数の使い方を紹介してきました。WHERE句で絞り込んでの集計、GROUP BY句でグループ化しての集計、さらにそこから集計値を条件としたHAVING句での絞り込み……と、様々な集計が行えます。

効率的な集計を行うためには、集計の対象となるテーブルのフィールド構成をしっかり設計しておくことが大切です。取引結果を定着記録するテーブル(例では「累積売上_fx」)には、事後に集計で必要となるフィールドを埋め込んでおかなければ意味がありません。対象となるテーブルに必要なフィールドが存在しない場合、それを含む他のテーブルと関連付けをしたビュー(例では「vw在庫一覧」)を作るなど、運用面での工夫も必要になります。


Downloadサンプルファイル (LZH形式 1.81KB)



トップページ
SUM関数とグループ化
集計関数の使用例
グループ化と集計
HAVING句による絞り込み
グループ化と集計の例
DISTINCTオプション
COUNT関数とDISTINCTオプション
SUM、AVG関数とDISTINCTオプション
あとがき
Copyright © MESCIUS inc. All rights reserved.