我尝试使用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
变体不可用,您需要做类似的事情:
-
ROW
类型的交换侧面,以便confidence
是第一个 - 排序阵列
- 交换
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)))
....