![]()
SQLクリニック(9) Page
1/2SQL分析関数をさらに深く追求してみよう
株式会社インサイトテクノロジー
中島 益次郎
2005/10/29
本連載はSQLの応用力を身に付けたいエンジニア向けに、さまざまなテクニックを紹介する。SQLの基本構文は平易なものだが、実務で活用するには教科書的な記述を理解するだけでは不十分だ。本連載は、著名なメールマガジン「おら! オラ! Oracle - どっぷり検証生活」を発行するインサイトテクノロジーのコンサルタントを執筆陣に迎え、SQLのセンス向上に役立つ大技小技を紹介していく。(編集局)
| 主な内容 --Page 1--
--Page 2--
|
今回も、前回「極めよう!分析関数によるSQL高速化計画」に引き続き、分析関数の中からウィンドウ関数とレポート関数を取り上げて説明します。
それでは、ウィンドウ関数を利用して、分析してみましょう。ウィンドウ関数を使用して、累積集計、移動集計、集中集計を計算できます。今回は、ウィンドウ関数を簡単に理解してもらうために、累積集計について説明します。
ウィンドウ関数には、SUM()、AVG()、MAX()、MIN()、COUNT()、STDDEV()、FIRST_VALUE()、LAST_VALUE()などが存在します。普段よく使用するSUM()やAVG()が、なぜウィンドウ関数なの? 集計関数じゃないの? と思われた方も多いと思います(ウィンドウ関数は、集計ウィンドウ関数と呼ばれる場合もあります)。
ウィンドウ関数を理解するには、「ウィンドウ」という概念を理解する必要があります。ウィンドウの概念を図で表してみましょう(集計関数と分析関数の違いは、前回の内容を参照してください)。
![]() |
| 図1 「ウィンドウ」の概念 「グループ」は分析関数が分析を行う範囲を指定し、「ウィンドウ」はグループ内のどの範囲のデータを集計するかを指定する。 |
「ウィンドウ」の概念は、分かりましたか? 言葉や図で理解するのは、難しいですね。では、実際に実行された値を見て、「ウィンドウ」(ウィンドウ関数)の理解を深めていきましょう。おなじみのSCOTTユーザーが所有するEMP表を使ってやってみます。
SQL> desc emp |
| リスト1 EMP表のスキーマ定義 |
ウィンドウ関数のSUM()を使用して、EMP表の各JOB(職種)別に給料(SAL)の累積集計を行います。
SQL> select job, ename, sal, |
| リスト2 ウィンドウ関数のSUM()を使用した累積集計 |
上のSQL文は、以下の処理を行います。
- 集合(EMP表全体)をJOBごとにグループ分けするように指定
(partition by job) - グループ内のデータをどのような順番で分析するかを指定
(order by sal) - グループ内のデータをどのように集計するかウィンドウを指定
(rows between unbounded preceding and current row)
3番目のウィンドウの指定について、もう少し詳しく説明しておきます。
rows between unbounded preceding and current rowは、
rows
between ウィンドウ開始点 and ウィンドウ終了点 |
を表しています。ウィンドウ開始点に指定したunbounded precedingは、「グループの最初の行をウィンドウの開始点とする」ことを意味しています。リスト2の結果では、JOBごとにグループ分けをしたので、1行目(ANALYST)、3行目(CLERK)、7行目(MANAGER)、10行目(PRESIDENT)、11行目(SALESMAN)がウィンドウ開始点と指定されたことになります。
ウィンドウ終了点に指定したcurrent rowは、「ウィンドウの終了点を常にカレント行とする」ことを意味しています。カレント行が移動するとウィンドウ終了点も移動します。リスト2の結果で、JOBがCLERKの結果を見てみると、AMOUNT_SAL列の結果が各行で集計されていることが確認できます。ウィンドウ終了点が、グループの最後にたどり着いた時点で、累積計算が終了していることも上の結果より確認することができます。
一連の流れをまとめてみましょう。カレント行はグループの最初の行からグループの最後の行までスライドします。スライドするたびにカレント行ではその時点でのウィンドウを用いて累積計算を行い、結果をカレント行に格納します。
ウィンドウ関数を使いこなすうえで、理解すべき「ウィンドウ」の概念は、理解できましたか?(次ページへ続く)
| 1/2 |
| Index | |
| 連載 SQLクリニック(9) SQL分析関数をさらに深く追求してみよう |
|
| Page 1 ・ウィンドウ関数を使った分析 |
|
| Page 2 ・レポート関数を利用した分析 |
|
| SQLクリニック |
ホワイトペーパー(TechTargetジャパン)
- Officeユーザーにこそ? CouchDBお手軽アプリ開発 (2010/2/8)
Excelレガシーの置き換えはCouchDBで?! CouchAppを使って「ドキュメント指向データベース」 を手軽に体験しよう - 不正行為を未然に防ぐログの分析と活用 (2010/2/1)
あの事件も、監査ログが活用できていれば防げました。不正を許さないためには、取るだけでなく活用方法を知るべきです - まずは体験! インストールから中身確認まで (2010/1/28)
Oracleは大規模システム専用で難しい、というのは大きな間違い! あなたのそばにあるWindowsで、そのチカラを身をもって体験してみよう - アプライアンスにOSSにXML、2009年のその先は? (2010/1/25)
未来を展望するにはまず過去から学ぶべし。商用DBにOSS、NoSQLなど、激動の2009年データベース事情を振り返ってみます
|
|
スキルアップ/キャリアアップ(JOB@IT)
スポンサーからのお知らせ
- - PR -
- - PR -
お勧め求人情報

**先週の人気講座ランキング**
〜CCNA編〜
| ◆ | 企業の仮想化に足りない“発想”とは? 仮想化運用管理のキモは意外なところに! New! |
| ◆ | 操作もマニュアルも分かりやすい! ユーザー視点で開発されたPC管理ツール New! |
| ◆ | 仮想化すればコストは削減できるか? 仮想化に必要な「3つの視点」を解説する |

| ◆ | セキュリティを知り尽くす上野氏が登壇! @ITメールソリューションLive! in Tokyo |
| ◆ | 運用管理の課題を“2つの観点”から分析 ユーザー満足度の高い「仮想環境」とは? |
| ◆ | 世界に通用するストレージの作り方とは? 製品に込めた思いを富士通の開発者に聞く |

| ◆ | OSSで手間も時間も、障害も減った―― 「マピオンの事例」オープンソース活用法 |
| ◆ | 「ノートPCの持ち出し禁止」で大丈夫? 情報漏えいを防ぐ管理手法とインフラは? |
| ◆ | 1日の処理を1秒に――MySQLの達人が語る 「コスト削減」できるチューニング |

| ◆ | ドキュメント作成を自動化して、SEの作業 効率を大幅アップ! Visio 2007の魅力 |
| ◆ | 急速に広がるHyper-Vでのサーバ仮想化 そのベストプラクティスをデルが解説 |
| ◆ | @IT主催セミナーで語られた、「担当者に 求められるセキュリティ対策」をレポート |

| ◆ | @IT「Windows 7」 特設サイトオープン! 最新情報・移行ノウハウを公開しています |







