MIN_BY
min_by(expr1, expr2) [FILTER (WHERE condition)]
功能描述
MIN_BY
MIN_BY
函数用于从一组数据中找出与
expr2
expr2
中最小值相关联的
expr1
expr1
的值。该函数在处理成对的数据时非常有用,可以帮助你快速找到与特定条件相关的最佳匹配项。
参数说明
expr1
expr1
:任何数据类型。这是你希望根据 expr2
expr2
的最小值返回的值。
expr2
expr2
:可比较的数据类型,包括数值类型(如 TINYINT
TINYINT
、SMALLINT
SMALLINT
、INT
INT
、BIGINT
BIGINT
、FLOAT
FLOAT
、DOUBLE
DOUBLE
、DECIMAL
DECIMAL
),时间类型(如 DATE
DATE
、TIMESTAMP
TIMESTAMP
),字符串类型(如 CHAR
CHAR
、VARCHAR
VARCHAR
、STRING
STRING
)以及二进制类型(如 BINARY
BINARY
)。
返回结果
- 返回结果的类型与
expr1
expr1
的类型相匹配。
- 如果
expr2
expr2
中的所有值均为 NULL
NULL
,则返回结果也为 NULL
NULL
。
使用示例
- 数值类型的示例:
SELECT min_by(num1, num2)
FROM VALUES
((1, 10)),
((2, 20)),
((3, 5)),
((4, 30))
AS tab(num1, num2);
+--------------------+
| min_by(num1, num2) |
+--------------------+
| 3 |
+--------------------+
在这个示例中,我们可以看到
num2
num2
的最小值是 5,与它相关联的
num1
num1
的值是 3。
- 时间类型的示例:
SELECT min_by(date1, date2)
FROM VALUES
(('2022-01-01', '2023-01-01')),
(('2022-02-01', '2022-12-31')),
(('2022-03-01', '2022-01-01'))
AS tab(date1, date2);
+----------------------+
| min_by(date1, date2) |
+----------------------+
| 2022-03-01 |
+----------------------+
在这个示例中,我们可以看到
date2
date2
的最小值是 '2022-01-01',与它相关联的
date1
date1
的值是 '2022-03-01'。
- 字符串类型的示例:
SELECT min_by(str1, str2)
FROM VALUES
(('apple', 'A')),
(('banana', 'B')),
(('cherry', 'C'))
AS tab(str1, str2);
+--------------------+
| min_by(str1, str2) |
+--------------------+
| apple |
+--------------------+
在这个示例中,我们可以看到
str2
str2
的最小值是 'A',与它相关联的
str1
str1
的值是 'apple'。
- 使用 FILTER 子句条件性地查找关联值:
SELECT min_by(num1, num2) FILTER (WHERE num2 > 10)
FROM VALUES
((1, 10)),
((2, 20)),
((3, 5)),
((4, 30))
AS tab(num1, num2);
+------------------------------------------------+
| min_by(num1, num2) FILTER (WHERE (num2 > 10)) |
+------------------------------------------------+
| 2 |
+------------------------------------------------+
注意事项
- 请确保
expr1
expr1
和 expr2
expr2
的数据类型兼容,否则可能导致函数执行失败。
- 如果
expr2
expr2
中的所有值均为 NULL
NULL
,函数将返回 NULL
NULL
。
MIN_BY
MIN_BY
函数适用于成对数据的比较和筛选,但不适用于单独的数据项。