MIN_BY 函数

min_by(expr1, expr2) [FILTER (WHERE condition)]

功能描述

MIN_BY 函数用于从一组数据中找出与 expr2 中最小值相关联的 expr1 的值。该函数在处理成对的数据时非常有用,可以帮助您快速找到与特定条件相关的最佳匹配项。

参数说明

  • expr1:任何数据类型。这是您希望根据 expr2 的最小值返回的值。
  • expr2:可比较的数据类型,包括数值类型(如 TINYINTSMALLINTINTBIGINTFLOATDOUBLEDECIMAL),时间类型(如 DATETIMESTAMP),字符串类型(如 CHARVARCHARSTRING)以及二进制类型(如 BINARY)。

返回结果

  • 返回结果的类型与 expr1 的类型相匹配。
  • 如果 expr2 中的所有值均为 NULL,则返回结果也为 NULL

使用示例

  1. 数值类型的示例:
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。

  1. 时间类型的示例:
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'。

  1. 字符串类型的示例:
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'。

  1. 使用 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                                              |
+------------------------------------------------+

注意事项

  • 请确保 expr1expr2 的数据类型兼容,否则可能导致函数执行失败。
  • 如果 expr2 中的所有值均为 NULL,函数将返回 NULL
  • MIN_BY 函数适用于成对数据的比较和筛选,但不适用于单独的数据项。

联系我们
预约咨询
微信咨询
电话咨询