Home実験室 − No.0058


        No.0058(SQL)
        件数を数える(COUNT関数)

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

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

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



  1. 【COUNT関数】
     COUNT関数は、行数(件数=レコード数)を数えてくれる。これは使う頻度がかなり高い。

SQL> SELECT COUNT(*) FROM TT01_学生; COUNT(*) ---------- 3429 SQL>



  2. GROUP BY句と併用すれば、グループごとのカウントをすることも可能。

SQL> SELECT 血液型,COUNT(*) FROM TT01_学生 GROUP BY 血液型; 血液型 COUNT(*) ---------- ---------- 1 1298 2 767 4 311 3 1053 SQL>



  3. AVG関数も併用すれば、用途が膨らみ、ますます夢膨らむ。まるでAccessの集計クエリのようだ。

SQL> SELECT RPAD(DECODE(血液型,1,'A',2,'B',3,'O',4,'AB'),3,' ') 血液型, 2 COUNT(*) 人数 , Round(AVG(TOEIC),1) TOEIC平均 FROM TT01_学生 GROUP BY 血液型; 血液型 人数 TOEIC平均 ------ ---------- ---------- A  1298 571.3 B  767 554.6 AB 311 575.9 O  1053 549.1 SQL>



  4. COUNT列が複数あったらどうなるのだろう?
     下の結果から想像するに多分、COUNT関数の引数として指定した列のNull以外の数字をカウントしているものと想像できる。

SQL> Select COUNT(*),COUNT(TOEIC) FROM TT01_学生; COUNT(*) COUNT(TOEIC) ---------- ------------ 3429 2209 SQL>



  5. 上の仮説を検証するため、COUNSとNVLをネストしてみよう....。
     下のようになった。やはりそうだ、COUNT関数はNullは数えない。

SQL> Select COUNT(*),COUNT(NVL(TOEIC,0)) FROM TT01_学生; COUNT(*) COUNT(NVL(TOEIC,0)) ---------- ------------------- 3429 3429 SQL>



  6. NULLをカウントしないというCOUNT関数の特性を踏まえて、3.の集計クエリをもっと素敵にできる。

SQL> SELECT RPAD(DECODE(血液型,1,'A',2,'B',3,'O',4,'AB'),3,' ') 血液型, 2 COUNT(*) 人数 , COUNT(TOEIC) TOEIC受験者数,Round(AVG(TOEIC),1) TOEIC平均 FROM TT01_学生 GROUP BY 血液型; 血液型 人数 TOEIC受験者数 TOEIC平均 ------ ---------- ------------- ---------- A  1298 829 571.3 B  767 481 554.6 AB 311 201 575.9 O  1053 698 549.1 SQL>





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


Home実験室 − No.0058

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