![]()
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ジャパン)
- ここまでできる! CouchDBパワーアップ作戦 (2010/3/18)
さらに一歩踏み込んで、実運用のためのノウハウを知りましょう。全文検索、ユーザー認証、負荷分散手法を解説します - 診断ツールでデータベースの健全性を保つ (2010/3/5)
DBをセキュアに保つには、日々のチェックが重要。診断ツールを運用に組み込むことが、情報漏えい対策の第一歩です - トムが説く、エンジニアがしてはならないこと (2010/3/2)
Oracleエンジンそのものをデザインする男、トム・カイト。カリスマエンジニアが説明する、陥りやすい「ぼくたちの失敗」とは - “スコット”といえばなんと答える? (2010/2/22)
ツーといえばカー、スコットといえばもちろん! そんな根っからのDB人間チェックや週末の勉強会など、2月もDB漬けでした
|
|
スキルアップ/キャリアアップ(JOB@IT)
スポンサーからのお知らせ
- - PR -
| 「いつかは壊れるサーバ」そんな故障に 迅速で安価に手軽に対応する方法とは? New! |
| 「特権ユーザー」の事件を防げ! 万能権限を持つユーザーの管理方法とは? New! |
| 仮想環境の構築とデータ保護の特効薬?! 実績と信頼性の高いパッケージで安心運用 |
| 仮想環境のバックアップもこれまでどおり 「まるごと取ってまるごと戻す」簡単運用 |
| おばかアプリ選手権、第4弾開催中!! ムダにカッコよくてくだらない作品求ム! |
| 社内ファイルサーバを“クラウド”に統合 VPN直結「クラウド型ストレージ」を紹介 |
| その数、なんと400台以上! グループ内 サーバの「統合管理」によるメリットは? |
| 美人!? まあまあ? 気になる いやし系!! PV急増で「美人時計」がとった手段とは? |
| 進化を続ける富士通ストレージETERNUS DX 製品開発者の自信を裏付けるものとは何か |
| 運用管理の課題を“2つの観点”から分析 ユーザー満足度の高い「仮想環境」とは? |
- - PR -
お勧め求人情報

**先週の人気講座ランキング**
〜CCNA編〜
| ◆ | TomcatやJBossなどAPサーバ環境に関する 情報を集約! “業務”用APサーバ大百科 New! |
| ◆ | 一気に解説! 最新のクラスタストレージ 「RAIDを超えたストレージ基準」……など New! |
| ◆ | クラウド的ユーザー体験の変化は脅威か? 仮想化技術を使いこなす運用管理術を紹介 New! |

| ◆ | 上司や部下、部署内メンバーとの情報共有 を“ガラッ”と変えるコラボツールとは? New! |
| ◆ | おばかアプリ選手権、第4弾開催中!! ムダにカッコよくてくだらない作品求ム! |
| ◆ | 社内ファイルサーバを“クラウド”に統合 VPN直結「クラウド型ストレージ」を紹介 |

| ◆ | Twitterのアカウントはなぜ突破された? メールによる新手の攻撃手法とその対策 |
| ◆ | もう仮想化のお試しフェイズは終わりだ! Hyper-V 2.0が基幹システムも仮想化 |
| ◆ | 美人!? まあまあ? 気になる いやし系!! PV急増で「美人時計」がとった手段とは? |

| ◆ | クライアント企業から求められる人材 ⇒IT技術と経営戦略を併せ持つ「戦略家」 |
| ◆ | .NET編集長が実践する「技術情報検索術」 サンプル・コードを簡単に探す“技”は? |
| ◆ | 業務効率と情報セキュリティ対策を両立! 手間なく確実に機密情報を守る方法とは? |

| ◆ | 進化を続ける富士通ストレージETERNUS DX 製品開発者の自信を裏付けるものとは何か |
| ◆ | 運用管理の課題を“2つの観点”から分析 ユーザー満足度の高い「仮想環境」とは? |

| ◆ | 【CTC事例】約30の基幹システムを統合! 膨大なバッジジョブを制御した方法は? |
| ◆ | 仮想化すればコストは削減できるか? 仮想化に必要な「3つの視点」を解説する |
| ◆ | その数、なんと400台以上! グループ内 サーバの「統合管理」によるメリットは? |







