来自两个或多个字段的最大值

Posted

技术标签:

【中文标题】来自两个或多个字段的最大值【英文标题】:Biggest value from two or more fields 【发布时间】:2011-02-06 15:01:03 【问题描述】:

我需要从两个字段中获取最大的价值:

SELECT MAX(field1), MAX(field2)

现在,我怎样才能从这两者中获得最大的价值?

【问题讨论】:

GREATEST() 是最大的,LEAST() 是最小的。 【参考方案1】:

您可能想要使用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:是的,您需要SELECT GREATEST(MAX(field1), MAX(field2)); 才能从所有行中获取绝对最大值。如果您使用SELECT GREATEST(field1, field2);,您将返回一个结果集,其中每一行的字段1 和字段2 之间的最大值。 这就是我一直在寻找的东西我确信有一个功能,但我不知道这个名字,现在它很有意义:) 由于每个MAX() 必须在处理行时保持运行最大值,因此使用MAX(GREATEST(field1,field2)) 可能会更有效。【参考方案2】:

如果您为每一行选择 GREATEST()

SELECT GREATEST(field1, field2)

如果其中一个字段为 NULL,它将返回 NULL。你可以使用 IFNULL 来解决这个问题

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

【讨论】:

是的,很遗憾,即使您有两打字段要比较,您也必须完成所有这些 IFNULLs!【参考方案3】:
mysql> SELECT GREATEST(2,0);
        -> 2

那么,试试吧:

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

【讨论】:

【参考方案4】:
SELECT max( CASE
                WHEN field1 > field2 THEN field1
                ELSE field2
            END ) as biggestvalue 
FROM YourTable;

【讨论】:

当我有 100 列时,此解决方案不可行。 @Deepak,好的,但是 10 多年前我不知道“GREATEST”或“LEAST”函数调用的答案,但原帖询问了 2 列,如果你如果有一个包含 100 列相似上下文的表,那么您需要重新考虑一个严重的数据库设计问题。 是的,谢谢您的澄清。现在,您的评论将帮助其他人了解何时使用。【参考方案5】:

使用 GREATEST/LEAST 和 MIN/MAX

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

【讨论】:

以上是关于来自两个或多个字段的最大值的主要内容,如果未能解决你的问题,请参考以下文章

SQL group by 后查某字段最大值

mysql中多个字段中的最大值

arcgis10.x多个字段最小值最大值平均值计算

计算两个或多个数字/数组之间的最大公约数

C语言中return语句怎样返回两个或多个值

Python初级练习小实例(21-50例),1个实例多个例子相互参考