文档

MAX_BY与MIN_BY

更新时间:

Hologres从V1.3.36版本开始支持MAX_BY与MIN_BY函数,用于获取当某一列(y列)的值为最大值或最小值时,对应着的另外一列(x列)的取值。本文为您介绍MAX_BY与MIN_BY函数的用法。

使用限制

该函数适用于Hologres V1.3.36及以上版本的实例,若实例低于该版本,请您通过加入实时数仓Hologres交流群申请升级实例,详情请参见如何获取更多的在线支持?

语法

MAX_BY与MIN_BY函数用于比较某一列(y列)取值的大小,当y列取值为最大值或最小值时,返回对应着的另外一列(x列)的取值。语法如下。

说明

数字类型按数字大小进行比较,非数字类型按照字典排序进行比较。

MAX_BY(x, y);
MIN_BY(x, y);

参数说明如下。

参数

描述

y

需要比较大小的列。

x

另外一列的字段名。

  • 当y列取值为最大值时,MAX_BY函数返回此列的取值结果。

  • 当y列取值为最小值时,MIN_BY函数返回此列的取值结果。

使用说明如下。

  • 当MAX_BY函数中y列的最大值存在多个时,则返回对应的多个x值中的最大值。

  • 当MIN_BY函数中y列的最小值存在多个时,则返回对应的多个x值中的最小值。

  • y列的NULL值不参与计算。当y列所有值均为NULL时,函数返回值为NULL。

示例数据

DROP TABLE IF EXISTS test;
CREATE TABLE IF NOT EXISTS test (
    id int,
    name text,
    cost int
);
INSERT INTO test
    VALUES (1, 'a', 100), (1, 'aa', 200), (1, 'aaa', 300), (2, 'b', 150), (2, 'bb', 300), (3, 'c', 150), (3, 'cc', 50);

示例

  • 使用MAX_BY函数,通过GROUP BYid进行分组,查询每组cost最大值对应的name值。示例语句如下。

    SELECT id, max_by(name, cost) FROM test GROUP BY id;
    
     id | max_by
    ----+--------
      2 | bb
      1 | aaa
      3 | c
    (3 rows)
  • 使用MAX_BY函数,查询cost最大值(存在多个)对应的name值。示例语句如下。

    select max_by(name, cost) from test;
    
     max_by
    --------
     bb
    (1 row)
  • 使用MIN_BY函数,查询cost最小值对应的name值。示例语句如下。

    SELECT min_by(name, cost) FROM test;
    
     min_by
    --------
     cc
    (1 row)
  • 本页导读 (1)
文档反馈