具有多个返回列的max_by

时间:2019-05-31 07:14:05

标签: 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是单列,而且我不知道如何将其转换为多列。

2 个答案:

答案 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