订购行与行



我尝试使用array_sort函数对行排序,但不是我想要的结果。

正确的第一个结果顺序

[{type=CALM, confidence=95.1536636352539}, {type=CONFUSED, confidence=1.1397864818572998}, {type=HAPPY, confidence=0.07988717406988144}, {type=SAD, confidence=1.7613277435302734}, {type=SURPRISED, confidence=0.3601384460926056}]

第二行返回另一个结果

[{type=CALM, confidence=0.5053133368492126}, {type=CONFUSED, confidence=0.4852835536003113}, {type=HAPPY, confidence=92.1430892944336}, {type=SAD, confidence=1.6924850940704346}, {type=SURPRISED, confidence=3.10842227935791}]

预期第二行的结果为

[
{type=HAPPY, confidence=92.1430892944336},
{type=SURPRISED, confidence=3.10842227935791},
{type=SAD, confidence=1.6924850940704346},
{type=CALM, confidence=0.5053133368492126},
{type=CONFUSED, confidence=0.4852835536003113}]

可能会因信心排序吗?

在较新的Presto版本中,您可以使用 array_sort函数,该函数采用lambda函数(例如,使用比较器在Java中进行排序(:

SELECT array_sort(array_or_rows,
    (a, b) -> IF(a[2] < b[2], 1, IF(a[2] = b[2], 0, -1))
...

但是,雅典娜位于Presto 0.172,因此此array_sort变体不可用,您需要做类似的事情:

  1. ROW类型的交换侧面,以便 confidence是第一个
  2. 排序阵列
  3. 交换ROW S返回

例如:

SELECT
  transform(
    array_sort(
      transform(
        array_or_rows,
        r -> CAST(r AS ROW(confidence double, type varchar)))),
    r -> CAST(r AS ROW(type varchar, confidence double)))
....

相关内容

  • 没有找到相关文章