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是单列,而且我不知道如何将其转换为多列。
答案 0 :(得分:1)
从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)
)
答案 1 :(得分:0)
(x1, x2, x3)
创建带有匿名字段的row
。当前,要访问各个行字段,you need to cast the value to a row with named fields:
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。