データ分析に欠かせない「集計関数」について
はじめに
新しい年を迎え4回目となる今回のSQL-BOOTCAMPでは、データ分析には欠かせない集計関数について説明します。便利で強力な関数なので、ぜひ使い方をマスターしてください。
訓練に使用するデータベースは、これまでに引き続き、いつもの「SQLite」を使用していきます。
それでは、今回も張り切って訓練へ行ってみましょう!
強力な武器その4(集計関数)
集計関数とは、ある項目に対して合計したり、平均値を求めたり、あるいはデータ件数を取得したり等、その名の通り集計を行う関数です。都度計算をする必要がないので、データ分析等に利用すると便利な関数です。今回は、下表に示す基本的な5つの集計関数を紹介します。
また、集計関数を利用する際に項目をグループ単位で集計できる、集計関数には不可欠なGROUP BY
句も併せて紹介します。
第1回、第2回に引き続き、社員テーブル(tbl_employees)に登録されているデータを使用して説明していきます。今回は集計関数の説明のため、以前利用したテーブルの項目を一部変更したいと思います。社員テーブルを作成済みの場合は、始めに下記のDROPコマンドで社員テーブルを削除してください。その後、再度CREATEコマンドで社員テーブルを作成し、INSERTコマンドでデータを挿入してください。まだ社員テーブルを作成していない場合は、CREATEコマンドから実行してください。
【DROPコマンド】DROP TABLE tbl_employees;【CREATEコマンド】
CREATE TABLE tbl_employees (emp_code INTEGER , emp_name TEXT , kana TEXT , gender TEXT , age INTEGER , dept_code INTEGER);【INSERTコマンド】
INSERT INTO tbl_employees (emp_code,emp_name,kana,gender,age,dept_code) VALUES ('1','HoriiTaro','ホリイタロウ','M','40','1') , ('2','IshimuraHana','イシムラハナ','F','33','2') , ('3','KitajimaRuna','キタジマルナ','F','45','3') , ('4','MuroiYuri',NULL,'F',NULL,'1') , ('5','KitazawaAika','キタザワアイカ','F','33','1') , ('6','MitaniKoukiti','ミタニコウキチ','M','23','2');【社員テーブル作成済みの場合(DROP、CREATE、INSERT)】 【社員テーブル未作成の場合(CREATE、INSERT)】
作成した社員テーブルの内容を確認してみましょう。
.headers on .mode column SELECT * FROM tbl_employees;
*「.headers」「.mode」は表示内容の設定コマンドなので、ログイン後に1回実行すればOKです。
INSERTコマンドで作成した6件のデータを確認できます。
それでは、本題の集計関数に行ってみましょう!
(1)COUNT関数
COUNT
関数は、指定された項目Xの件数を返します。ただし、項目Xの値がNULLの場合は件数から除外されます。また、項目Xに「*」(アスタリスク)を指定した場合は、指定したテーブルの行数を返します。
項目Xに「*」を指定した場合と、テーブル項目を指定した場合の使用例を確認してみましょう。
項目Xに「*」を指定してデータ件数を取得する。
SELECT COUNT( * ) FROM tbl_employees;
社員テーブルのデータ件数「6」が返されます。
次に、項目Xに「kana」を指定して実行してみましょう。
SELECT COUNT( kana ) FROM tbl_employees;
結果は「5」となります。
登録したデータを確認してみると、emp_code = 4
の「kana」の値がNULLとなっています(SELECTの結果は何も表示されていません)。NULLはCOUNT関数の集計対象とならないので、件数は「5」が返されます。
(2)SUM関数
SUM
関数は指定された項目Xの合計を返します。ただし、項目の値がNULLの場合は除外して集計します。
下図の使用例では「年齢」の合計を取得しています。
項目Xに「age」を指定して実行してみます。
SELECT SUM( age ) FROM tbl_employees;
結果は使用例にあるように「age」の合計「174」が返されます。SUM
関数もCOUNT
関数と同様に、emp_code = 4
の「age」のNULL値は対象外となるので注意しましょう。