集約関数を使いこなす

2008年7月23日(水)
田中 宏昌

集約関数を取り扱う

 「第3回:結果データを上手にまとめるには?(http://www.thinkit.co.jp/article/97/3/)」に引き続き、結果をまとめあげる部分について触れていきます。今回のテーマはGROUP BY句で用いる集約関数を、いかに処理するかということです。

 複雑で巨大なクエリを行った結果を端的に示すため、通常、平均値やデータの個数、株価などでは独自の指標など、さまざまな値を計算します。

 ストアドプロシージャーを使って複雑な関数を使うという方法もありますが、ここでは、ごく一般的に用いられている集約関数を用いることにします。複雑な計算も、これら基本的な集約関数の組み合わせで実現できる場合が多くあります。

 基本的な集約関数を図1の上に示します。SUM関数やCOUNT関数などは、おなじみでしょう。

SUM関数の取り扱い

 いきなり一般論だと分かりにくいので、まずはSUM関数を例に、全体の流れを示します。これは、ほかの集約関数でもほぼ同じ流れです。

 ポイントは、「2段階で」計算するということです。

 SUM関数の場合、サーバーごとに、普通にSUM関数を含む集計クエリを行います。例えば、図1では、以下のようなクエリを行います。これが第1段階です。

SELECT [商品], SUM([金額]) AS [合計金額]
FROM [テーブル]
GROUP BY [商品];

 このクエリの結果は、サーバーごとに作成されるため、最終的にはこれらをまとめた仕上げのクエリが必要です。図1(下)では、親サーバーにて第1段階の結果を1つのテーブル上にマージし(図1(下)の2.のプロセス)、このマージしたテーブルに対して、さらに同じ集計クエリを行います。

SELECT [商品], SUM([金額]) AS [合計金額]
FROM [各サーバーの結果をマージしたテーブル]
GROUP BY [商品];

 この2段階の集計クエリにより、期待する結果が得られます。

 次にそのほかの集約関数での実現方法について紹介しましょう。

株式会社メディカルアーキテクツ
株式会社メディカルアーキテクツ、共同経営者。NTTデータ、NTTデータ経営研究所(出向)にてITプロジェクトの企画や企業の戦略系コンサルティングを数多く経験。その後、外資系医療コンサルティング企業のCIOとして伝説のシステムを数多く作り上げ、2年前に起業。東京大学工学部航空宇宙工学科卒。http://www.mediarc.jp/

Think ITメルマガ会員登録受付中

Think ITでは、技術情報が詰まったメールマガジン「Think IT Weekly」の配信サービスを提供しています。メルマガ会員登録を済ませれば、メルマガだけでなく、さまざまな限定特典を入手できるようになります。

Think ITメルマガ会員のサービス内容を見る

他にもこの記事が読まれています