極めよ!並列処理 4

集約関数を使いこなす

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

田中 宏昌

2008年7月23日 20:00

集約関数を取り扱う

 「第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段階の集計クエリにより、期待する結果が得られます。

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

この記事をシェアしてください

人気記事トップ10

人気記事ランキングをもっと見る