極めよう! 分析関数によるSQL高速化計画SQLクリニック(8)(3/3 ページ)

» 2005年09月27日 00時00分 公開
[中島益次郎株式会社インサイトテクノロジー]
前のページへ 1|2|3       

分析関数でグループごとに計算する

 前ページのSQL文は、EMP表すべて(集合)を1つのグループと見なして、分析を行いました。次は、EMP表の各JOB(職種)別に給料(SAL)が高い順にランキングしてみましょう。

SQL> select ename, job, sal
          , rank() over(partition by job order by sal desc) rank
       from emp ;
ENAME      JOB              SAL       RANK
---------- --------- ---------- ----------
SCOTT      ANALYST         3000          1
FORD       ANALYST         3000          1
MILLER     CLERK           1300          1
ADAMS      CLERK           1100          2
JAMES      CLERK            950          3
SMITH      CLERK            800          4
JONES      MANAGER         2975          1
BLAKE      MANAGER         2850          2
CLARK      MANAGER         2450          3
KING       PRESIDENT       5000          1
ALLEN      SALESMAN        1600          1
TURNER     SALESMAN        1500          2
WARD       SALESMAN        1250          3
MARTIN     SALESMAN        1250          3
14行が選択されました。
リスト3 JOB(職種)ごとにグループに分け給料(SAL)を高い順にランク付け

 このSQL文は、EMP表すべて(集合)をJOBごとのグループに分けて、分析を行っています。SQL文を見れば分かるように、RANK関数でPARTITION BY句を記述することで、集合をどのようなグループに分けて分析を行うかを指定できます。RANK関数で使用しているORDER BY句は、分けられたグループをどのカラムで昇順・降順にランク付けを行うかを指定します。分析関数がどのように処理されるのかを理解しておけば、分析関数の構文も覚えやすいですね。

 分析関数を使用しない方法で、SQL文を記述しようと思うと、大変です。JOBごとにUNION ALLでSALのORDER BYを副問い合わせで記述することになります。RANK関数だけからでも、分析関数で問い合わせ処理の向上と開発作業の向上のメリットがあることを理解してもらえたと思います。


 今回は、「分析関数とは」から始まり、実際に分析関数の1つであるRANK関数(DENSE_RANK関数)の説明を行いました。次回は、さらにいろいろな分析関数について解説する予定です。(次回に続く)

筆者紹介

株式会社インサイトテクノロジー

Oracleに特化した製品開発、コンサルティングを手掛けるエンジニア集団。大道隆久は緊迫したトラブル現場でも常に冷静沈着であり、スマートに解決へと導いていくシステムコンサルタント。



前のページへ 1|2|3       

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。