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

MySQLで2つのカラムの差の絶対値が特定の数値を超えるレコードを抽出する方法

MySQLでは、ABS()関数を使うことで、2つの値の差の絶対値を簡単に計算できます。この絶対値が特定の数値より大きい(または以上の)レコードだけをSELECT文で抽出するには、以下のような構文を使用します。

基本構文

SELECT * FROM テーブル名 WHERE ABS(カラム名1 - カラム名2) >= 特定の数値;

それでは、実際にサンプルテーブルを作成して動作を確認していきましょう。

サンプルテーブルの作成

まず、2つの数値カラムを持つテーブルを作成します。

mysql> create table DemoTable
(
    Number1 int,
    Number2 int
);
Query OK, 0 rows affected (0.59 sec)

テストデータの挿入

次に、INSERTコマンドを使っていくつかのレコードを挿入します。

mysql> insert into DemoTable values(10,20);
Query OK, 1 row affected (0.18 sec)
mysql> insert into DemoTable values(100,200);
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable values(400,300);
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable values(1000,500);
Query OK, 1 row affected (0.15 sec)

挿入したレコードの確認

SELECTコマンドでテーブル内の全レコードを表示してみます。

mysql> select *from DemoTable;

実行すると、以下のような結果が出力されます。

+---------+---------+
| Number1 | Number2 |
+---------+---------+
| 10      | 20      |
| 100     | 200     |
| 400     | 300     |
| 1000    | 500     |
+---------+---------+
4 rows in set (0.00 sec)

差の絶対値が特定の数値より大きいレコードを抽出する

ここからが本題です。2つの値の差の絶対値が特定の数値よりも大きいレコードのみを取得するクエリを書いてみましょう。今回は比較対象の数値として「100」を使用します。

mysql> select *from DemoTable where abs(Number1-Number2) > 100;

各レコードの差の絶対値は以下のとおりです。

  • (10, 20) → 差は 10 → 条件に合致しない
  • (100, 200) → 差は 100 → 条件に合致しない
  • (400, 300) → 差は 100 → 条件に合致しない
  • (1000, 500) → 差は 500 → 条件に合致

そのため、実行結果は以下のように「1000」と「500」のレコードのみが返されます。

+---------+---------+
| Number1 | Number2 |
+---------+---------+
| 1000    | 500     |
+---------+---------+
1 row in set (0.02 sec)

ポイントまとめ

  • ABS()関数は引数の絶対値を返すため、どちらのカラムが大きくても常に正の値で比較できます。
  • 「以上」で絞り込みたい場合は、>ではなく>=を使用してください。上記の例で>=を使うと、差がちょうど100である2件も結果に含まれます。
  • WHERE句の中で直接ABS()を使えるため、複雑な計算や前処理は不要です。
  1. 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

  2. MySQLの1つのクエリで2つのSELECTステートメントを組み合わせ、特定の値を持たないレコードを抽出する方法

    特定のフィールドに特定の値が存在しないレコードを取得したい場合、WHERE句とサブクエリ(副問い合わせ)を組み合わせることで実現できます。本記事では、1つのクエリ内で2つのSELECTステートメントを使用して目的のレコードを抽出する方法を、テーブル作成から実行結果まで具体例とともに解説します。 テーブルの作成 まず、サンプル用のテーブルを作成しましょう。ここでは、UserNameとUserType(ENUM型)の2つのカラムを持つテーブルを定義します。 mysql> create table DemoTable1840 ( UserName varchar(20),