MySQL
 Computer >> コンピューター >  >> プログラミング >> MySQL

MySQLで各行の大きい値を持つ列の合計を選択する方法

MySQLでは、CASE文を使って条件を設定することで、各行における大きい方の列値だけを取り出し、その合計を簡単に求めることができます。本記事では、実際にテーブルを作成しながら、その手順をわかりやすく解説します。

テーブルの作成

まず、サンプル用のテーブルを作成しましょう。

mysql> create table DemoTable
    -> (
    -> X int,
    -> Y int
    -> );
Query OK, 0 rows affected (0.57 sec)

XとYという2つのint型カラムを持つテーブル「DemoTable」が作成できました。

レコードの挿入

次に、INSERTコマンドを使ってテーブルにデータを挿入します。

mysql> insert into DemoTable values(20,30);
Query OK, 1 row affected (0.15 sec)

mysql> insert into DemoTable values(40,15);
Query OK, 1 row affected (0.14 sec)

mysql> insert into DemoTable values(80,85);
Query OK, 1 row affected (0.13 sec)

データの確認

SELECT文を使って、テーブル内のすべてのレコードを表示してみましょう。

mysql> select *from DemoTable;

出力結果

上記のクエリを実行すると、以下のような結果が得られます。

+------+------+
| X    | Y    |
+------+------+
|   20 |   30 |
|   40 |   15 |
|   80 |   85 |
+------+------+
3 rows in set (0.00 sec)

各行の大きい値の合計を求めるクエリ

ここからが本題です。CASE文をSUM関数と組み合わせることで、各行においてXとYのどちらか大きい方の値を判定し、それらを合計できます。

mysql> SELECT SUM(CASE WHEN X > Y THEN X ELSE Y END) from DemoTable;

このクエリの仕組みは以下の通りです。

  • X > Y の場合: Xの値を採用する(THEN X)
  • それ以外の場合: Yの値を採用する(ELSE Y)

今回のサンプルデータでは、「20と30 → 30」「40と15 → 40」「80と85 → 85」となり、これらの合計が算出されます。

出力結果

+----------------------------------------+
| SUM(CASE WHEN X > Y THEN X ELSE Y END) |
+----------------------------------------+
|                                     155 |
+----------------------------------------+
1 row in set (0.00 sec)

まとめ

CASE文は条件分岐を行うSQLの基本構文ですが、SUMなどの集計関数と組み合わせると非常に強力なツールになります。今回のように「各行の大きい方の値を合計したい」といったケースだけでなく、条件に応じた柔軟な集計処理にも応用できるので、ぜひ覚えておきましょう。

  1. MySQLで重複する列の値ごとに最小値を含む行を取得する方法

    この記事では、MySQLにおいて重複する値を持つ列(ここでは「Class」)ごとに、別の列(「Amount」)の最小値を取得する方法を解説します。GROUP BY句とMIN()関数を組み合わせることで、カテゴリ別の最小値を簡単かつ効率的に抽出できます。1. サンプルテーブルの作成まず、以下のコマンドでテーブルを作成します。mysql> create table DemoTable1875 ( Id int NOT NULL AUTO_INCREMENT PRIMARY KEY, Class varchar(20), Amount int ); Que

  2. MySQLで列が複数の値をすべて満たす行を選択する方法|GROUP BY・HAVING句の使い方

    MySQLである列が「複数の値をすべて満たしている」行だけを抽出したい場合、IN()句と GROUP BY、そして HAVING 句を組み合わせることで実現できます。この記事では、具体的なサンプルを使いながら手順をわかりやすく解説します。1. サンプルテーブルを作成するまず、テスト用のテーブルを作成します。ここでは氏名(FirstName)と科目(Subject)を持つシンプルなテーブルを用意しました。mysql> create table DemoTable1885 ( FirstName varchar(20), Subject varchar(50)