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

MySQLで2つの値の差の絶対値が特定の数値より大きいレコードを抽出する方法

MySQLでは、絶対値を求めるABS()関数を使うことで、「2つの値の差の絶対値が特定の数値より大きい」レコードをテーブルから簡単に抽出できます。ここでは、学生の試験点数を管理する「studentmarks」テーブルのデータを例に、その使い方を解説します。

ABS()関数とは

ABS()は、引数に渡した数値の絶対値(0からの距離)を返す関数です。負の値を渡した場合は正の値に変換され、正の値はそのまま返されます。この特性を利用すると、2つの列の値の「差の大きさ」だけに着目して条件絞り込みを行うことができます。

基本構文

SELECT * FROM テーブル名 WHERE ABS(列名1 - 列名2) > 数値;

実行例

次のSQLでは、Hindi(ヒンディー語)とEnglish(英語)の点数差の絶対値が10より大きいレコードだけを取得しています。

mysql> Select * from studentmarks where abs(Hindi-English)>10;
+--------+-------+---------+------+---------+-----------+
| Name   | Hindi | English | Math | Physics | Chemistry |
+--------+-------+---------+------+---------+-----------+
| Gaurav | 75    | 86      | 95   | 69      | 85        |
| Rahul  | 74    | 85      | 97   | 69      | 86        |
| Mohit  | 73    | 87      | 89   | 69      | 86        |
+--------+-------+---------+------+---------+-----------+
3 rows in set (0.00 sec)

上記の結果セットを見ると、Gauravさん(75点と86点で差11)、Rahulさん(74点と85点で差11)、Mohitさん(73点と87点で差14)の3件が該当していることがわかります。つまり、このクエリは英語とヒンディー語の点数差の絶対値が10より大きいレコードのみを返しているのです。

ポイントまとめ

  • ABS()を使うことで、どちらの値が大きいかを意識せずに「差の大きさ」だけで条件判定できる。
  • 単純に Hindi-English > 10 と書くと、Hindiの方が小さい場合(差がマイナスになる場合)は抽出対象外になってしまうため注意が必要。
  • 比較演算子は > 以外にも >=<BETWEEN などと組み合わせて柔軟に条件を指定できます。
  1. MySQLで現在の日付とテーブル内の日付レコードの差を求める方法

    現在の日付とテーブルに保存された日付レコードの差(日数)を求めるには、MySQLの DATEDIFF() 関数を使用します。この関数は、2つの日付の差を日数で返してくれる便利な関数です。ここでは、実際にテーブルを作成し、データを挿入して、現在の日付との差を計算する手順を順番に見ていきましょう。1. テーブルの作成まず、日付型のカラムを持つテーブルを作成します。mysql> create table DemoTable1446-> (-> DueDate date-> );Query OK, 0 rows affected (1.42 sec)2. レコードの挿入次に、I

  2. 1つのMySQLクエリで2つのテーブルの最大値から最小値を取得する方法

    2つのテーブルそれぞれの最大値を比較し、その中から最小値を取得したい場合には、MySQLのUNIONを使用することで実現できます。まずはサンプル用のテーブルを作成しましょう。 最初のテーブルを作成する CREATE TABLE文で最初のテーブルを作成します。 mysql> create table DemoTable1     -> (     -> Value int     -> ); Query OK, 0 rows affected (0.48