2つ以上のフィールドからの最大値


83

私は2つの分野から最大の価値を得る必要があります:

SELECT MAX(field1), MAX(field2)

さて、どうすればこれら2つから最大の価値を得ることができますか?


7
GREATEST()LEAST()最小のものと同様に最大のもの。
James Oravec 2014

回答:


167

次の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))です。それ以外の場合は間違った番号が返されます(最大ではありません)
Qiao

1
@Qiao:はい、SELECT GREATEST(MAX(field1), MAX(field2));すべての行から絶対最大値を取得する必要があります。を使用SELECT GREATEST(field1, field2);すると、各行のfield1とfield2の間の最大値を持つ結果セットが返されます。
Daniel Vassallo 2010

それは私が探していたものです私はこれのための機能があると確信していました、しかし私は名前の手がかりを持っていませんでした、今それは完全に理にかなっています:)
Emil Borconi 2017年

39

各行にGREATEST()を選択している場合

SELECT GREATEST(field1, field2)

NULLを返しますフィールドのいずれかがNULLである場合。これを解決するためにIFNULLを使用できます

SELECT GREATEST(IFNULL(field1, 0), IFNULL(field2, 0))

ええ、悲しいことにIFNULL、比較するフィールドが20個ある場合でも、これらすべてを実行する必要があります。
ifediOkonkwo19年

6
mysql> SELECT GREATEST(2,0);
        -> 2

だから、試してみてください:

mysql> SELECT GREATEST(MAX(field1), MAX(field2));

1
SELECT max( CASE
                WHEN field1 > field2 THEN field1
                ELSE field2
            END ) as biggestvalue 
FROM YourTable;

数百の列がある場合、このソリューションは実行できません。
Deepak

1
@Deepak、わかりました。ただし、「GREATEST」または「LEAST」関数呼び出しについて知らなかった10年以上前の回答ですが、元の投稿では2列について尋ねられました。また、数百列のテーブルがあるかどうか同様のコンテキストの場合、再考する必要のある深刻なデータベース設計の問題があります。
DRapp

はい、そうです、説明してくれてありがとう。今、あなたのコメントは、いつ何を使うべきかについて他の人を助けるでしょう。
Deepak

0

最小/最大での最大/最小の使用

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
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.