MySQLでクエリ結果の最後の行に合計を表示する方法
MySQLの検索結果の最終行に各列の合計値を表示したい場合、UNIONを使うのが定番のテクニックです。通常のSELECT文と、SUM関数で合計を計算するSELECT文を結合することで、データ行の直後に合計行を追加できます。
基本構文
(
SELECT yourColumnName1,
yourColumnName2,
yourColumnName3,
...
FROM yourTableName
)
UNION
(
SELECT "yourMessage" AS anyAliasName1,
SUM(yourColumnName1) AS anyAliasName2,
SUM(yourColumnName2) AS anyAliasName3,
...
FROM yourTableName
);最初のSELECT文で元のデータを取得し、UNIONで連結した2つ目のSELECT文では、先頭列に「Total」などのラベル文字列を、残りの列にSUM関数による合計値を指定します。これにより、結果セットの最後に合計行が1行追加されます。
サンプルテーブルの作成
実際に動作を確認するため、テーブルを作成しましょう。以下のクエリを実行します。
mysql> create table ProductDemo
-> (
-> ProductId varchar(10),
-> ProductQuantity int,
-> ProductValue int
-> );
Query OK, 0 rows affected (0.63 sec)テストデータの挿入
INSERTコマンドを使って、いくつかのレコードを挿入します。
mysql> insert into ProductDemo values('Product-1',10,300);
Query OK, 1 row affected (0.10 sec)
mysql> insert into ProductDemo values('Product-2',5,200);
Query OK, 1 row affected (0.17 sec)
mysql> insert into ProductDemo values('Product-3',7,340);
Query OK, 1 row affected (0.13 sec)
mysql> insert into ProductDemo values('Product-4',20,500);
Query OK, 1 row affected (0.10 sec)
mysql> insert into ProductDemo values('Product-5',30,1000);
Query OK, 1 row affected (0.42 sec)登録データの確認
SELECT文ですべてのレコードを表示してみます。
mysql> select *from ProductDemo;
実行結果は以下のとおりです。
+-----------+-----------------+--------------+ | ProductId | ProductQuantity | ProductValue | +-----------+-----------------+--------------+ | Product-1 | 10 | 300 | | Product-2 | 5 | 200 | | Product-3 | 7 | 340 | | Product-4 | 20 | 500 | | Product-5 | 30 | 1000 | +-----------+-----------------+--------------+ 5 rows in set (0.00 sec)
最終行に合計を表示するクエリ
それでは、結果の最後の行に合計を表示するクエリを見てみましょう。
mysql> (SELECT ProductId,
-> ProductQuantity,
-> ProductValue
-> FROM ProductDemo)
-> UNION
-> (SELECT "Total" AS ProductName,
-> SUM(ProductQuantity) AS TotalQuantity,
-> SUM(ProductValue) AS TotalValue
-> FROM ProductDemo);実行結果
+-----------+-----------------+--------------+ | ProductId | ProductQuantity | ProductValue | +-----------+-----------------+--------------+ | Product-1 | 10 | 300 | | Product-2 | 5 | 200 | | Product-3 | 7 | 340 | | Product-4 | 20 | 500 | | Product-5 | 30 | 1000 | | Total | 72 | 2340 | +-----------+-----------------+--------------+ 6 rows in set (0.00 sec)
出力結果を見ると、元の5件の商品データに続いて、「Total」というラベル付きの合計行が最終行に追加されていることがわかります。数量の合計は72、金額の合計は2340です。
補足:WITH ROLLUPとの違い
なお、MySQLにはGROUP BYと組み合わせて使える「WITH ROLLUP」オプションもあります。単純に全行の合計だけが必要な場合は本記事のUNION方式がシンプルですが、グループごとの小計と総計を同時に取得したい場合はWITH ROLLUPが便利です。用途に応じて使い分けるとよいでしょう。
-
JavaでMySQLデータベースのテーブルから最後のレコードを取得する方法
MySQLデータベースからデータを取得するには、JavaのexecuteQuery()メソッドを使用します。本記事では、テーブルに登録された最後のレコード(最新の1件)をJavaプログラムで取得する手順を、サンプルコード付きでわかりやすく解説します。1. MySQLデータベースにテーブルを作成するまず、MySQLデータベース上にテーブルを用意します。ここでは「sample」データベースに、以下のようなテーブルを作成します。mysql> create table javaGetDataDemo -> ( -> Id int NOT NULL AUTO_INCREMENT PRI
-
MySQLで日付の最後の1秒(23:59:59)を取得する方法
```html MySQLである日付の「その日の最後の1秒」、つまり 23:59:59 を取得したい場合は、INTERVAL 演算子を使うのが簡単です。この記事では、実際にテーブルを作成し、データを挿入したうえで、日付の最後の1秒を取得するクエリを実行するまでの手順を紹介します。 1. テーブルを作成する まず、DATETIME型のカラムを持つテーブルを作成します。 mysql> create table DemoTable -> ( -> JoiningDatetime datetime, -> DueDatetime datetime