Два массива_агг в запросе используют одно и то же окно?
Рассмотрим этот пример:
SELECT comment_date
, array_agg(user_id) users
, array_agg(comment) comments
FROM user_comments
GROUP BY comment_date
- Можно ли предположить, что индексы пользователей и комментариев относятся к одной и той же записи (например, пользователи [3] создали комментарии [3])?
- Возможно ли, что порядок двух массивов может относиться к разным записям, возможно, из-за повышения производительности?
Я не знаю достаточно о внутренностях 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