見るためのデータベース・SQL 件数・合計・最大・最小・平均の計算


エンジニアにとってみれば、SQL は使えてあたりまえかもしれませんが、営業や管理部の人からすれば魅惑の魔法といわれることもあります。 しかし非エンジニアの方でも SQL が使えた方がいいですし、 そのほうがエンジニアの作業も楽になります。

ここでは、複数のテーブルからデータを取得する場合を考えます。


環境

  • PostgreSQL
  • pgAdmin 3
  • Windows 10

PostgreSQL を使います。 データベースに Oracle Database, MySQL を使用している場合でも同じです。

件数・合計・最大・平均を求める

次のような売上テーブル(sales)を考えます。

sales
id place_id amount member_id sale_date
1 1 1000 4 2016-02-03
2 2 2000 4 2016-04-01
3 1 5000 2 2016-04-05
4 2 3000 3 2016-06-03

このテーブルに含まれる、売上額(amount)の件数、合計、最大、最小、平均を求めます。

件数は COUNT, 合計は SUM, 最大は MAX, 最小は MIN, 平均は AVG で計算できます。

COUNT には 1 を指定しています。 この場合はレコード件数を返します。 COUNT(2)COUNT(*) でも同じです。 また今回は影響はありませんが COUNT(s.amount) とすると、 s.amount に値が入っているものの合計を計算します。 データベースのデータには値のない場合があります。

また、 -- 合計 などと書いていますが、 これはコメントといいます。 -- の後に書いたものは無視されますので、 説明が必要な場合は -- の後に書いておくと後で見たときに役に立ちます。

では member_id ごとに合計、最大、最小、平均を計算してみます。

member_id count sum max min avg
2 1 5000 5000 5000 3000
3 1 3000 3000 3000 3000
4 2 3000 2000 1000 1500

GROUP BY の後に、 集計のキーとなるカラム名を書くことで、 そのカラムの値をキーにして集計してくれます。 これをグループ化といいます。 ここでは member_id でグループ化をしていますが、 複数のカラムを使って集計することもできます。