max_by具有多个返回列

  • 本文关键字:返回 by max presto
  • 更新时间 :
  • 英文 :


Presto的文档说max_by(x, y)返回与所有输入值中y的最大值相关联的x值。(https://prestodb.github.io/docs/current/functions/aggregate.html#max_by(

如何返回与最大 y 关联的多列(不仅是 x(?我发现max_by((x1, x2, x3), y)工作(几乎(,但它返回带有 x1、x2、x3 的单列,我不知道如何将其转换为多列。

从 Presto 314 开始,现在可以使用 [] 运算符引用ROW字段。

SELECT r[1], r[2], r[3]
FROM (
   SELECT max_by((x1, x2, x3), y) r
   FROM (...) t(y, x1, x2, x3)
)

自 Presto 314 以来

正如Martin Traverso指出的那样,由于Presto 314有一个更好的选择,即[]下标运算符。参见马丁的回答。

对于旧版本,请参见下文

(x1, x2, x3)创建具有匿名字段的row。目前,要访问单个行字段,您需要将值强制转换为具有命名字段的行:

CAST(row_value AS row(some_field field_type, other_field, field_type, ...))

在查询中,这可以是max_by内部或外部(无关紧要(。例:

presto> SELECT r.afield, r.bfield, r.cfield
     -> FROM (
     ->     SELECT max_by(CAST((x1, x2, x3) AS row(afield integer, bfield varchar, cfield double)), y) r
     ->     FROM (VALUES (1, 42, 'a', 13e0), (2, 40, 'b', 77e0)) t(y, x1, x2, x3)
     -> );
 afield | bfield | cfield
--------+--------+--------
     40 | b      |   77.0
(1 row)

我知道这很冗长。有一个问题可以使其更方便:https://github.com/prestosql/presto/issues/860。

相关内容

  • 没有找到相关文章

最新更新