Два массива_агг в запросе используют одно и то же окно?

Рассмотрим этот пример:

SELECT    comment_date
        , array_agg(user_id) users
        , array_agg(comment) comments
FROM      user_comments
GROUP BY  comment_date
  1. Можно ли предположить, что индексы пользователей и комментариев относятся к одной и той же записи (например, пользователи [3] создали комментарии [3])?
  2. Возможно ли, что порядок двух массивов может относиться к разным записям, возможно, из-за повышения производительности?

Я не знаю достаточно о внутренностях Postgres, чтобы доверять упорядочиванию array_agg.

1 ответ

Решение

Если вы не укажете это явно, вы не сможете предполагать, что применяется агрегатная функция. Если вы хотите, чтобы два звонка array_agg иметь соответствующие значения, вы должны добавить order by пункт им обоим. Например:

SELECT    date
        , array_agg(user_id ORDER BY user_id) users
        , array_agg(comment ORDER BY user_id) comments
FROM      user_comments
GROUP BY  date
Другие вопросы по тегам