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などと組み合わせて柔軟に条件を指定できます。
-
MySQLで現在の日付とテーブル内の日付レコードの差を求める方法
現在の日付とテーブルに保存された日付レコードの差(日数)を求めるには、MySQLの DATEDIFF() 関数を使用します。この関数は、2つの日付の差を日数で返してくれる便利な関数です。ここでは、実際にテーブルを作成し、データを挿入して、現在の日付との差を計算する手順を順番に見ていきましょう。1. テーブルの作成まず、日付型のカラムを持つテーブルを作成します。mysql> create table DemoTable1446-> (-> DueDate date-> );Query OK, 0 rows affected (1.42 sec)2. レコードの挿入次に、I
-
1つのMySQLクエリで2つのテーブルの最大値から最小値を取得する方法
2つのテーブルそれぞれの最大値を比較し、その中から最小値を取得したい場合には、MySQLのUNIONを使用することで実現できます。まずはサンプル用のテーブルを作成しましょう。 最初のテーブルを作成する CREATE TABLE文で最初のテーブルを作成します。 mysql> create table DemoTable1 -> ( -> Value int -> ); Query OK, 0 rows affected (0.48