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