Home実験室 − No.0065


        No.0065(SQL)
        集計関数いろいろ(STDDEV、VARIANCE、MEDIAN、RANK、DENSE_RANK、OVER、LEAD)

■環境
  □OS: Windows XP Professional SP3
  □Oracle: Oracle Database 11g R2 (Standard)
  □OSログインユーザ: ORA_DBAグループ
  □Oracleユーザ: dicdic(実験用ユーザー) → 実験環境構築スクリプト

■実験
  0. 実験ユーザー「dicdic」でコネクトする。

SQL> conn dicdic/Oracle11g 接続されました。 SQL>



  1. 【STDDEV関数】
STDDEV関数は、標準偏差を求める。

SQL> Select STDDEV(TOEIC) FROM TT01_学生; STDDEV(TOEIC) ------------- 261.009496 SQL>



  2. 【VARIANCE関数】
VARIANCE関数は、ばらつきを求める。

SQL> Select VARIANCE(TOEIC) FROM TT01_学生; VARIANCE(TOEIC) --------------- 68125.9567 SQL>



  3. 【MEDIAN関数】
MEDIAN関数は、中央値を求める。(平均じゃないよ)

SQL> Select MEDIAN(TOEIC) FROM TT01_学生; MEDIAN(TOEIC) ------------- 586 SQL>



  4. 【RANK】
順位を求めるのに、RANKというのを使うと、同じ得点の人を同じ順位にして表示してくれる。
おっと、しかしこれだと得点の低い順になってしまう。

SQL> Select 氏名,TOEIC, RANK() OVER(order by TOEIC) FROM TT01_学生; 氏名 TOEIC RANK()OVER(ORDERBYTOEIC) ---------------------------------------- ---------- ------------------------ 富田 金蔵 120 1 小平 昇 120 1 稲垣 登美子 121 3 平本 昭男 121 3 長瀬 勝治 121 3 野中 健吉 122 6 松永 瑠奈 124 7 高田 綾花 124 7 宮崎 幸一郎 124 7 宇都 晴美 124 7 西田 菜々 125 11 下山 朋美 125 11 高岡 範久 125 11 岸本 健二 125 11   ・   ・   ・ 長嶋 勝治 2210 岩瀬 敏夫 2210 田中 一平 2210 久米 貢 2210 高嶋 美香 2210 春日 利吉 2210 福原 翔子 2210 森谷 俊章 2210 3429行が選択されました。 SQL>



  5. 高得点の順にしたければ、descにすればよいが、それだとNull(TOEIC未受験者)がトップに
なってしまうので、それをNVL関数を使って回避する。

SQL> Select 氏名,TOEIC, RANK() OVER(order by NVL(TOEIC,0) desc) FROM TT01_学生; 氏名 TOEIC RANK()OVER(ORDERBYNVL(TOEIC,0)DESC) ---------------------------------------- ---------- ----------------------------------- 土谷 久典 998 1 亀田 正志 998 1 須藤 貞次 998 1 安永 花鈴 998 1 後藤 富子 998 1 斉藤 靖彦 996 6 野呂 寛治 996 6 荻原 健志 996 6 半田 英夫 995 9 熊倉 花梨 995 9 木本 真桜 995 9 新垣 昌孝 994 12 大坪 祥子 994 12 田端 辰也 992 14 石野 勇三 992 14 新井 丈夫 992 14 宮島 雅哉 991 17   ・   ・   ・ 長嶋 勝治 2210 岩瀬 敏夫 2210 田中 一平 2210 久米 貢 2210 高嶋 美香 2210 春日 利吉 2210 福原 翔子 2210 森谷 俊章 2210 3429行が選択されました。 SQL>



  6. 【DENSE_RANK】
同じ得点の人を同じ順位で表示してくれるのはよいが、「番号が飛ぶのはイヤだ」という場合には、
DENSE_RANKというのが用意されている。

SQL> Select 氏名,TOEIC, DENSE_RANK() OVER(order by NVL(TOEIC,0) desc) FROM TT01_学生; 氏名 TOEIC DENSE_RANK()OVER(ORDERBYNVL(TOEIC,0)DESC) ---------------------------------------- ---------- ----------------------------------------- 土谷 久典 998 1 亀田 正志 998 1 須藤 貞次 998 1 安永 花鈴 998 1 後藤 富子 998 1 斉藤 靖彦 996 2 野呂 寛治 996 2 荻原 健志 996 2 半田 英夫 995 3 熊倉 花梨 995 3 木本 真桜 995 3 新垣 昌孝 994 4 大坪 祥子 994 4 田端 辰也 992 5 石野 勇三 992 5 新井 丈夫 992 5 宮島 雅哉 991 6   ・   ・   ・ 長嶋 勝治 800 岩瀬 敏夫 800 田中 一平 800 久米 貢 800 高嶋 美香 800 春日 利吉 800 福原 翔子 800 森谷 俊章 800 3429行が選択されました。 SQL>



  7. 【LEAD関数】
LEAD関数は、次のレコードの値を併記できるので、「次は誰?」というような場合に用いる。
たとえば、学生番号は飛び番なので、直近の次の番号の人に連絡網を流すような場合、「次は誰か?」を
表示させるには、次のようにする。「次の人」の値が、一つずつズレて表示されているのが分かるかな?
そして最後の人は、当然次がないのでNULLになります(下の例では伊東君)。

SQL> Select 学生番号,氏名, LEAD(学生番号) OVER(order by 学生番号) 次の人 FROM TT01_学生; 学生番号 氏名 次の人 --------- ---------------------------------------- --------- 2007B0114 窪田 信玄 2007B0132 2007B0132 須藤 貞次 2007B0156 2007B0156 黒田 比呂美 2007B0169 2007B0169 望月 淳三 2007B0179 2007B0179 岩田 昌信 2007B0188 2007B0188 菅沼 和奏 2007B0190 2007B0190 岩谷 彦太郎 2007B0193 2007B0193 島津 昌孝 2007B0195 2007B0195 下川 里沙 2007B0202 2007B0202 島本 史織 2007B0208   ・   ・   ・ 2014B0641 福永 竜雄 2014B0642 2014B0642 寺崎 綾 2014B0643 2014B0643 鳴海 汐里 2014B0644 2014B0644 会田 翔子 2014B0645 2014B0645 牧野 直吉 2014B0646 2014B0646 長沼 重彦 2014B0647 2014B0647 町田 雪子 2014B0648 2014B0648 伊東 昇一 3429行が選択されました。 SQL>





    【PR】    Oracle実験室監修  『Oracleアーキテクチャ鳥瞰図』 PDF  (Oracleのアーキテクチャを一目で俯瞰できるイラスト)  


Home実験室 − No.0065

© 2011-2011   Amateur Laboratory of ORACLE
inserted by FC2 system