【SQLで集計】GROUP BYを用いた便利な集計方法についてご紹介
カテゴリ:インターン生ブログ
こんにちは!伊神です!
この記事では、「SQLの種類」と「集計関数」について簡単にご紹介します。
集計関数については実際にSQL文を使いサンプルデータを用いてデータを集計する例を記事にしています。
また、弊社ではWebプロモーション成功事例集をまとめた限定資料を無料で配布しています。
Webマーケティングに興味がある方は、下記ページより目を通してみてください。
SQLとは
SQLはデータベースに格納されたデータを操作する言語です。大量のデータを効率的に操作することができます。
SQLは国際標準化されているため、OracleやMySQL、PostgreSQLなど媒体がどこであれ同じSQLで利用することができます。
SQLの種類3つ
データ操作言語(Data Manipulation Language)
データ操作言語(DML)は、データベースに対してデータを追加・更新・削除などを行うためのSQLです。
- SELECT(データの検索)
- INSERT(データの追加)
- UPDATE(データの更新)
- DELETE(データの削除)
SQLの種類なかでも特に使用頻度が高いです。
データ定義言語(Data Definition Language)
データ定義言語(DDL)は、テーブルなどを作成・削除・設定変更を行うためのSQLです。
- CREATE(テーブルの作成)
- ALTER(テーブルの設定変更)
- DROP(テーブルの削除)
- TRUNCATE(テーブルデータの削除)
テーブルの管理する際に必要となります。
データ制御言語(Data Control Language)
データ制御言語(DCL)は、DMLやDDLの利用を制御するためのSQLです。
- GRANT(権限付与)
- REVOKE(権限剥奪)
データベースの管理する際に必要となります。
SQLを使用した集計
先ほどご紹介したデータ操作言語(DML)のSELECTと集計関数でデータの集計の仕方をご紹介します。
今回はサンプルデータとしてMySQLの公式に置いてあるデータを使用しました。大量のデータがあるので学習用サンプルデータとしては最適です。
MySQL:https://dev.mysql.com/doc/index-other.html
是非使ってみてください!!
今回は「city」という名前のテーブルを使って集計方法をご紹介したいと思います。
合計を求める(SUM)
合計を求めるには、SUM関数を使用します。今回はデータの人口(Population)の合計を出力してみます。
SUM()のカッコ内に合計で出したいカラム名を指定することで、そのカラムの合計値が出力されます。
1 2 3 4 5 6 7 |
mysql> SELECT SUM(Population) FROM city; +-----------------+ | SUM(Population) | +-----------------+ | 1429559884 | +-----------------+ 1 row in set (0.00 sec) |
平均を求める(AVG)
平均を求めるには、AVG関数を使用します。今回は人口(Population)の平均を出力してみます。
AVG()のカッコ内に合計で出したいカラム名を指定することで、そのカラムの平均値が出力されます。
1 2 3 4 5 6 7 |
mysql> SELECT AVG(Population) FROM city; +-----------------+ | AVG(Population) | +-----------------+ | 350468.2236 | +-----------------+ 1 row in set (0.00 sec) |
最大値を求める(MAX),最小値を求める(MIN)
最大値を求めるにはMAX関数を使用します。逆に、最小値を求めるにはMIN関数を使用します。
人口(Population)の最大値、最小値を出力してみます。まずは最大値から
1 2 3 4 5 6 7 |
mysql> SELECT MAX(Population) FROM city; +-----------------+ | MAX(Population) | +-----------------+ | 10500000 | +-----------------+ 1 row in set (0.00 sec) |
次に最小値を出力します。
1 2 3 4 5 6 7 |
mysql> SELECT MIN(Population) FROM city; +-----------------+ | MIN(Population) | +-----------------+ | 42 | +-----------------+ 1 row in set (0.01 sec) |
データの個数を数える(COUNT)
データの個数(行数)を求めるにはCOUNT関数を使用します。COUNT関数の場合はレコードの行数をカウントする関数なので、どの列を指定してもいいので、カッコ内には「*」にします。
1 2 3 4 5 6 7 |
mysql> SELECT COUNT(*) FROM city; +----------+ | COUNT(*) | +----------+ | 4079 | +----------+ 1 row in set (0.00 sec) |
データをグループ化(GROUP BY)
今までは単純に合計値や平均値を出力していましたが、例えば今回のデータだと「国名コード(CountryCode)ごとの最大の人口(Population)」が知りたい場合「GROUP BY」を使用します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
mysql> SELECT CountryCode, MAX(Population) FROM city GROUP BY CountryCode; +-------------+-----------------+ | CountryCode | MAX(Population) | +-------------+-----------------+ | ABW | 29034 | | AFG | 1780000 | | AGO | 2022000 | | AIA | 961 | | ALB | 270000 | | AND | 21189 | | ANT | 2345 | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | ZAF | 2352121 | | ZMB | 1317000 | | ZWE | 1410000 | +-------------+-----------------+ 232 rows in set (0.01 sec) |
データがグループ化されて「国名コード(CountryCode)ごとの最大の人口(Population)」を出力することができました。
集計結果に対する条件指定(HAVING)
「GROUP BY」でグループ化で出力されたデータにさらに条件を指定したい場合「HAVING」を使用します。
「国名コード(CountryCode)ごとの最大の人口(Population)」に「人口(Population)の平均が1000000以上」という条件を指定します。
1 2 3 4 5 6 7 8 9 10 |
mysql> SELECT CountryCode, MAX(Population) FROM city GROUP BY CountryCode HAVING AVG(Population) >= 1000000; +-------------+-----------------+ | CountryCode | MAX(Population) | +-------------+-----------------+ | GIN | 1090610 | | HKG | 1987996 | | SGP | 4017733 | | URY | 1236000 | +-------------+-----------------+ 4 rows in set (0.00 sec) |
これで、「国名コード(CountryCode)ごとの人口(Population)の平均が1000000以上の最大人口(Population)」が出力されました。
最後に
今回はSQLの種類と集計方法について簡単にご紹介しました。
SQLを使うことにより自分の欲しい情報を取得することができます。
記述がシンプルで扱いやすく他にも様々な集計関数があるので是非調べてみて下さい!!
またwebで集客する方法を別の記事にまとめております。
詳しく解説しているので、web集客について深く知りたい方は、ぜひこちらもご覧ください。
弊社inglowでは、これから広告の運用を考えられている方、あるいはこれから広告代理店に運用をお願いされる方向けに、「業界別Web広告の成功事例」をまとめた資料を無料配布しております。
下記のフォームに入力いただくだけで、無料で資料をダウンロードしていただけます。ぜひご利用下さい。