Webサイト制作コースのお申し込みはこちら Webサイト制作コースのお申し込みはこちら

SQLのsum関数についてまとめています。sum関数は、対象の列をすべて加算・集計する関数です。

SQL sumの構文

もっともシンプルなsum関数の使い方は以下の通り。salaries(年収)テーブルから、salary(年収)をすべて集計する例です。

mysql> SELECT sum(salary) FROM `salaries`;
+--------------+
| sum(salary)  |
+--------------+
| 181480757419 |
+--------------+
1 row in set (1.42 sec)

しかし、sum関数は単独で使用することはあまりありません。group byを指定して、グルーピングごとの小計を計算するために使用するのが一般的です。

複数テーブルをgroup byでグルーピングしてsumで集計

以下は、group byと組み合わせたsumの使用例です。部署名(dept_name)ごとの社員の年収を小計しています。社員データ、年収データ、部署データは複数のテーブルに分かれているため、joinでテーブル結合をおこなって集計しています。salaries.to_date=’9999-01-01’という条件は、現在在籍中の社員を絞り込むための条件です。

select departments.dept_name, sum(salary) from employees
inner join salaries on salaries.emp_no = employees.emp_no
inner join dept_emp on employees.emp_no = dept_emp.emp_no
inner join departments on dept_emp.dept_no = departments.dept_no
where salaries.to_date = '9999-01-01'
group by dept_name;

+--------------------+-------------+
| dept_name          | sum(salary) |
+--------------------+-------------+
| Customer Service   |  1270982348 |
| Development        |  4627787365 |
| Finance            |  1089231961 |
| Human Resources    |   909717009 |
| Marketing          |  1300398678 |
| Production         |  3982729442 |
| Quality Management |  1045459198 |
| Research           |  1148334609 |
| Sales              |  3731370677 |
+--------------------+-------------+
9 rows in set (4.86 sec)

【関連記事】
SQL sumのサンプルコード集 基本の小計出力から、NULL対策まで 

複数の列をsumで集計

sum関数は、同時に複数指定使用可能です。以下は、score_tableテーブルの、first_score、second_score、third_scoreをそれぞれsumで集計するSQLです。

mysql> SELECT SUM(first_score), SUM(second_score), SUM(third_score) FROM score_table;
+------------------+-------------------+-------------------+
| SUM(first_score) | SUM(second_score) | SUM(third_score)  |
+------------------+-------------------+-------------------+
|              335 |               385 |               345 |
+------------------+-------------------+-------------------+
1 row in set (0.01 sec)

【関連記事】
【SQL】列や行の合計を求める方法をサンプル付きでていねいに解説!

SQLとover句で累計と小計を同時に求める

sum関数にover句を指定すると、指定した項目での小計を求めることができます。over句に何も指定しない場合は、グルーピングしていない全体の累計を求めることができます。

以下のSQLは、sales(売上)テーブルから、年、句に、製品、売上(profit)、total_profit(全体の累計)、country_profit(国ごとの売上小計)を抽出するSQLです。

mysql> SELECT
         year, country, product, profit,
         SUM(profit) OVER() AS total_profit,
         SUM(profit) OVER(PARTITION BY country) AS country_profit
       FROM sales
       ORDER BY country, year, product, profit;
+------+---------+------------+--------+--------------+----------------+
| year | country | product    | profit | total_profit | country_profit |
+------+---------+------------+--------+--------------+----------------+
| 2000 | Finland | Computer   |   1500 |         7535 |           1610 |
| 2000 | Finland | Phone      |    100 |         7535 |           1610 |
| 2001 | Finland | Phone      |     10 |         7535 |           1610 |
| 2000 | India   | Calculator |     75 |         7535 |           1350 |
| 2000 | India   | Calculator |     75 |         7535 |           1350 |
| 2000 | India   | Computer   |   1200 |         7535 |           1350 |
| 2000 | USA     | Calculator |     75 |         7535 |           4575 |
| 2000 | USA     | Computer   |   1500 |         7535 |           4575 |
| 2001 | USA     | Calculator |     50 |         7535 |           4575 |
| 2001 | USA     | Computer   |   1200 |         7535 |           4575 |
| 2001 | USA     | Computer   |   1500 |         7535 |           4575 |
| 2001 | USA     | TV         |    100 |         7535 |           4575 |
| 2001 | USA     | TV         |    150 |         7535 |           4575 |
+------+---------+------------+--------+--------------+----------------+

関連)MySQL :: MySQL 8.0 Reference Manual :: 12.21.2 Window Function Concepts and Syntax

まとめ

ポテパンダの一言メモ
  • sumは、対象の列を加算・合計する集計関数
  • sumは複数の列、複数のテーブルを対象にグルーピング集計が可能
  • sumとover句を組み合わせるとグループ小計と全体の累計を同時に集計可能

エンジニアになりたい人に選ばれるプログラミングスクール「ポテパンキャンプ 」

ポテパンキャンプは卒業生の多くがWebエンジニアとして活躍している実践型プログラミングスクールです。 1000名以上が受講しており、その多くが上場企業、ベンチャー企業のWebエンジニアとして活躍しています。

基礎的な学習だけで満足せず、実際にプログラミングを覚えて実践で使えるレベルまで学習したいという方に人気です。 プログラミングを学習し実践で使うには様々な要素が必要です。

それがマルっと詰まっているポテパンキャンプでプログラミングを学習してみませんか?

卒業生の多くがWebエンジニアとして活躍

卒業生の多くがWeb企業で活躍しております。
実践的なカリキュラムをこなしているからこそ現場でも戦力となっております。
活躍する卒業生のインタビューもございますので是非御覧ください。

経験豊富なエンジニア陣が直接指導

実践的なカリキュラムと経験豊富なエンジニアが直接指導にあたります。
有名企業のエンジニアも多数在籍し品質高いWebアプリケーションを作れるようサポートします。

満足度高くコスパの高いプログラミングスクール「ポテパンキャンプ」

運営する株式会社ポテパンは10,000人以上のエンジニアのキャリアサポートを行ってきております。
そのノウハウを活かして実践的なカリキュラムを随時アップデートしております。

代表の宮崎もプログラミングを覚えサイトを作りポテパンを創業しました。
本気でプログラミングを身につけたいという方にコスパ良く受講していただきたいと思っておりますので、気になる方はぜひスクール詳細をのぞいてくださいませ。