例: 各部門の従業員数の報告
COUNT (*)は、GROUP BY句が部門番号ごとに結果をグループ化するため、各部門の従業員数を報告します。
SELECT DeptNo, COUNT(*) FROM Employee GROUP BY DeptNo ORDER BY DeptNo;
GROUP BY句を指定しなければ、Employeeテーブルに入っている従業員の総数だけが報告されます。
SELECT COUNT(*) FROM Employee;
GROUP BY句を指定しなければ選択リストにDeptNo列を含めることができないことに注意してください。これは、その場合に任意の数の値が戻されるのに対して、COUNT(*)が1つの値しか戻さないためです。
例: Nullとして返された従業員
挿入されているが、まだ部門が割り当てられていない従業員がいる場合、その従業員のDeptNo列にNULLが入ります。
SELECT DeptNo, COUNT(*) FROM Employee GROUP BY DeptNo ORDER BY DeptNo;
2人の新しい従業員に部門が割り当てられていないと想定すると、その結果のテーブルは次のようになります。
DeptNo Count(*) ------ -------- ? 2 100 4 300 3 500 7 600 4 700 3
例: 部門にまだ割り当てられていない従業員数の計算
例: 各部門の従業員数のレポートの実行において、SELECT... COUNT … を使用し、部門番号による結果のグループ化を行なわなかったとしたら、結果テーブルにはDeptNoの登録済みの非NULLの出現だけが含まれることになり、部門に未割り当て(NULL)の2人の従業員は含まれないことになります。カウントが異なります(例: 各部門の従業員数のレポートでは23になり、この例で説明する文を使用すると21になります)。
Employeeテーブルの中で部門に割り当てられている21人の従業員のほかに、部門に割り当てられていない新しい従業員が2人いることを思い出してください(それぞれの新しい従業員の行には、nullの部門番号が入っています)。
SELECT COUNT(deptno) FROM employee ;
このSELECTによって、COUNTは、非null部門番号の出現の総数を戻します。
集約関数はnullを無視するため、2人の新しい従業員は数えられません。
Count(DeptNo) -------------- 21
例: 性別による従業員数を出すためのCOUNTの使用
この例では、COUNTを使用して、データベースのEmployeeテーブル内の男性従業員の数を数えます。
SELECT COUNT(sex) FROM Employee WHERE sex = 'M' ;
結果は、以下のようになります。
Count(Sex) ---------- 12
例: 非Null部門番号の行の総数の計算
この例では、COUNTが、nullでない部門番号の行の総数を部門ごとに数えます。
SELECT deptno, COUNT(deptno) FROM employee GROUP BY deptno ORDER BY deptno ;
ここでも、2人の新しい従業員が数えられていないことに注意する必要があります。
DeptNo Count(DeptNo) ------ ------------- 100 4 300 3 500 7 600 4 700 3
例: 部門ごとの従業員数を返す
部門番号ごとの従業員数を入手するには、GROUP BY句およびORDER BY句を指定したCOUNT (*)を使用します。
SELECT deptno, COUNT(*) FROM employee GROUP BY deptno ORDER BY deptno ;
この場合には、?で示されたnullも含まれます。
DeptNo Count(*) ------ -------- ? 2 100 4 300 3 500 7 600 4 700 3
例: Employeeテーブルにある部門数の判別
Employeeテーブルにある部門の数を調べるには、次のSELECT COUNTに示すようにCOUNT (DISTINCT)を使用します。
SELECT COUNT (DISTINCT DeptNo) FROM Employee ;
次のレポートが生成されます。
Count(Distinct(DeptNo)) ----------------------- 5
時系列の例については、<Teradata Vantage™ - 時系列テーブルと操作の概要、B035-1208>を参照してください。