SQLの関数②_集計関数
まず、関数の意味ですが、”関数”とは与えられたデータを処理し、その結果を返す昨日のことを言います。今回の集計関数ですと、平均を返す、最大値/最小値を返すなど様々なものがあります。具体的に一つづつ見ていきましょう。
1.COUNT関数
COUNT関数は、クエリの結果として返される行数をカウントします。引数として”*”(アスタリスク)を使用します。支店テーブルで試してみます。
支店テーブル
SELECT COUNT(*) FROM 支店;
結果は以下のとおりとなります。
上記のように列名は”COUNT(*)”で表示されます。わかりやすく別名で表示させることもできます。
SELECT COUNT(*) 支店数 FROM 支店;
結果は以下のとおりとなります。
WHERE句を使用すると、条件を満たす行数を調べることができます。
SELECT COUNT(*) 支店数 FROM 支店 WHERE 店舗面積 >= 700;
結果は以下のとおりとなります。
定休日が存在する支店がいくつあるかを調べるには以下のようにします。
SELECT COUNT(定休日) 支店数 FROM 支店;
結果は以下のとおりとなります。
定休日の取り方には何通りあるか調べる場合は以下のようにします。
この場合、NULL値はカウントしません。
SELECT COUNT(DISTINCT 定休日) 支店数 FROM 支店;
定休日は、”月”、”火”、”水”、”木”の4つありますので結果は4になります。
2.SUM関数
SUM関数は、指定された列の合計値を返します。まず、全ての店舗面積の合計を調べてみましょう。
SQLは以下のとおりとなります。
SELECT SUM(店舗面積) 面積合計 FROM 支店;
結果は以下のようになります。
複数の列の合計値を一度に出力させることもできます。たとえば、社員数と店舗面積の合計をそれぞれ調べるには以下のようにします。
SELECT SUM(社員数) 社員合計,SUM(店舗面積) 面積合計 FROM 支店;
結果は以下のようになります。
特定の条件を満たす行だけの合計を求めることもできます。たとえば、社員数が100人以上の支店の店舗面積の合計を求めるには以下のようにします。
SELECT SUM(店舗面積) 面積合計 FROM 支店 WHERE 社員数 >= 100;
結果は以下のようになります。
※.次のようなSQLはエラーになります。
SELECT 支店名,SUM(店舗面積) 面積合計 FROM 支店 WHERE 社員数 >= 100;
この場合、該当する支店名は3店舗あります。但し、SUM関数の出力行数は1行です。このように、3つの値と1つの値を同時に出力することはできません。GROUP BY句を使うと通常の列と集計関数を同時に指定することができます。GROUP BY句については後述します。
3.AVG関数
AVG関数は、指定された列の平均値を計算します。まず、全ての支店の店舗面積を調べてみましょう。SQLは以下のようになります。
SELECT AVG(店舗面積) 店舗面積平均 FROM 支店;
結果は以下のようになります。
次に、社員数と店舗面積の平均値をそれぞれ計算してみます。複数の列の平均値を同時に出力することができます。
SELECT AVG(社員数) 社員数平均,AVG(店舗面積) 店舗面積平均 FROM 支店;
結果は以下のようになります。
次に、社員数が70人以上の支店の店舗面積の平均を求めます。SQLは以下のようになります。
SELECT AVG(店舗面積) 店舗面積平均 FROM 支店 WHERE 社員数 >= 70;
結果は以下のようになります。
4.MAX関数
MAX関数は、指定された列の最大値を返します。まず最も広い店舗面積を求めます。
SELECT MAX(店舗面積) FROM 支店;
結果は以下のようになります。
MAX関数もWHERE句を使って、対象となる行を絞り込み、その中でも最大値を求めることができます。たとえば、社員数が60人以下の支店の中で、最も店舗面積が広い支店を求めるには以下のようになります。
SELECT MAX(店舗面積) FROM 支店; WHERE 社員数 <= 60;
結果は以下のようになります。
5.MIN関数
MIN関数は、指定された列の最小値を返します。まず最も狭い店舗面積を求めます。
SELECT MIN(店舗面積) FROM 支店;
結果は以下のようになります。
MIN関数とMAX関数を同じ列に使用すれば、その列の最小値と最大値を同時に求めることができます。SQLは以下のようになります。
SELECT MIN(社員数),MAX(社員数) FROM 支店;
結果は以下のようになります。
集計関数は以上となります。次回は文字列関数の説明をします。
コメントを残す