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。