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

MySQLで2つの列(カラム)の差分を降順に並べ替えて取得する方法

MySQLでは、ORDER BY句を使うことで、2つの列(カラム)の差分を計算し、その結果を昇順・降順に並べ替えて取得できます。本記事では、実際のテーブル作成からクエリ実行までの手順を順番に解説します。

1. サンプルテーブルを作成する

まず、2つのINT型カラムを持つテーブルを作成しましょう。

mysql> create table DemoTable
    (
    Value1 int,
    Value2 int
    );
Query OK, 0 rows affected (0.54 sec)

2. レコードを挿入する

次に、INSERTコマンドを使ってサンプルデータを登録します。

mysql> insert into DemoTable values(10,40);
Query OK, 1 row affected (0.20 sec)
mysql> insert into DemoTable values(50,5);
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable values(51,56);
Query OK, 1 row affected (0.18 sec)
mysql> insert into DemoTable values(52,78);
Query OK, 1 row affected (0.16 sec)
mysql> insert into DemoTable values(90,7);
Query OK, 1 row affected (0.21 sec)

3. テーブルの中身を確認する

SELECT文ですべてのレコードを表示してみましょう。

mysql> select *from DemoTable;

出力結果

+--------+--------+
| Value1 | Value2 |
+--------+--------+
| 10     | 40     |
| 50     | 5      |
| 51     | 56     |
| 52     | 78     |
| 90     | 7      |
+--------+--------+
5 rows in set (0.00 sec)

4. 差分を計算して並べ替えるクエリ

ここが本題です。(Value1 - Value2)のように減算を行い、その結果にエイリアス「Sub」を付けて、ORDER BY句で降順(DESC)に並べ替えます。

mysql> select (Value1-Value2) as Sub from DemoTable order by Sub DESC;

出力結果

+------+
| Sub  |
+------+
| 83   |
| 45   |
| -5   |
| -26  |
| -30  |
+------+
5 rows in set (0.00 sec)

このように、各レコードの「Value1 − Value2」の差分が大きい順(降順)に表示されました。

補足:昇順に並べ替えたい場合

逆に小さい値から表示したい場合は、DESCを外すか、明示的にASCを指定します。

mysql> select (Value1-Value2) as Sub from DemoTable order by Sub ASC;

また、エイリアスではなくORDER BY (Value1-Value2)のように式を直接指定することも可能です。ただし、可読性の観点からはエイリアスを使う方法がおすすめです。

  1. MySQLにおけるBIGINTとBIGINT(20)の違いとは?表示幅の意味を実例で解説

    BIGINTとBIGINT(20)の違いMySQLにおける「BIGINT」と「BIGINT(20)」の違いは、表示幅(display width)だけです。括弧内の数値「20」は、値を表示する際の桁数を指定するためのものであり、格納できる数値の範囲には一切影響しません。つまり、両者とも同じ範囲の整数(-9223372036854775808 ~ 9223372036854775807)を扱うことができます。なお、MySQL 8.0.17以降では整数型の表示幅指定は非推奨(deprecated)となっているため、新規開発での利用は避けるのが望ましいでしょう。動作を確認するサンプルテーブルの作成そ

  2. MySQLで2つの日時(DATETIME)値の差を求める方法

    MySQLで2つの日時値の差を求める方法MySQLで2つのDATETIME型の値の差を求めるには、TIMESTAMPDIFF()関数を使用します。この関数を使うことで、秒・分・時間などの任意の単位で2つの日時の差を簡単に計算できます。まず、サンプル用のテーブルを作成しましょう。mysql> create table DemoTable -> ( -> DueDatetime1 datetime, -> DueDatetime2 datetime -> );Query OK, 0 rows affected (0.86 sec)次に、INSE