私は2つの分野から最大の価値を得る必要があります:
SELECT MAX(field1), MAX(field2)
さて、どうすればこれら2つから最大の価値を得ることができますか?
回答:
次のGREATEST()関数を使用することをお勧めします。
SELECT GREATEST(field1, field2);
すべての行から絶対最大値を取得する場合は、次を使用することをお勧めします。
SELECT GREATEST(MAX(field1), MAX(field2));
例1:
SELECT GREATEST(1, 2);
+----------------+
| GREATEST(1, 2) |
+----------------+
| 2 |
+----------------+
1 row in set (0.00 sec)
例2:
CREATE TABLE a (a int, b int);
INSERT INTO a VALUES (1, 1);
INSERT INTO a VALUES (2, 1);
INSERT INTO a VALUES (3, 1);
INSERT INTO a VALUES (1, 2);
INSERT INTO a VALUES (1, 4);
SELECT GREATEST(MAX(a), MAX(b)) FROM a;
+--------------------------+
| GREATEST(MAX(a), MAX(b)) |
+--------------------------+
| 4 |
+--------------------------+
1 row in set (0.02 sec)
GREATEST(MAX(field1), MAX(field2))です。それ以外の場合は間違った番号が返されます(最大ではありません)
SELECT GREATEST(MAX(field1), MAX(field2));すべての行から絶対最大値を取得する必要があります。を使用SELECT GREATEST(field1, field2);すると、各行のfield1とfield2の間の最大値を持つ結果セットが返されます。
各行にGREATEST()を選択している場合
SELECT GREATEST(field1, field2)
NULLを返しますフィールドのいずれかがNULLである場合。これを解決するためにIFNULLを使用できます
SELECT GREATEST(IFNULL(field1, 0), IFNULL(field2, 0))
IFNULL、比較するフィールドが20個ある場合でも、これらすべてを実行する必要があります。
SELECT max( CASE
WHEN field1 > field2 THEN field1
ELSE field2
END ) as biggestvalue
FROM YourTable;
最小/最大での最大/最小の使用
GREATEST / LEAST:さまざまな列から最大値または最小値を検索する場合に列とともに使用されます。
MIN / MAX:さまざまな行から最大値または最小値を検索する場合に、行とともに使用されます。
表の例:
SELECT GREATEST(col_a, col_b, col_c) FROM temp;
SELECT MIN(GREATEST(col_a, col_b, col_c)) FROM temp; # 3 as output
SELECT MAX(GREATEST(col_a, col_b, col_c)) FROM temp; # 9 as output
SELECT LEAST(col_a, col_b, col_c) FROM temp;
SELECT MIN(LEAST(col_a, col_b, col_c)) FROM temp; # 1 as output
SELECT MAX(LEAST(col_a, col_b, col_c)) FROM temp; # 7 as output
GREATEST()LEAST()最小のものと同様に最大のもの。