Массив заказов со строками

Я пытаюсь отсортировать массив строк с помощью функции 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}]

Возможна сортировка по достоверности?

ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
0
0
338
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

В более новой версии Presto вы можете использовать функцию array_sort, которая принимает лямбда-функцию (например, сортировку в Java с помощью компаратора):

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

Тем не менее, Athena основан в Престо 0,172, так что это array_sort вариант недоступно, и вместо этого вам нужно сделать что-то вроде этого:

  1. поменяйте стороны вашего типа ROW так, чтобы confidence был первым
  2. сортировать массив
  3. поменять местами ROW обратно

Например.:

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)))
....

Другие вопросы по теме