查询中的两个 array_aggs 是否共享相同的 window?
Do two array_aggs in a query share the same window?
考虑这个例子:
SELECT comment_date
, array_agg(user_id) users
, array_agg(comment) comments
FROM user_comments
GROUP BY comment_date
- 假设 users 和 comments 的索引引用相同的记录(例如,创建的 users[3]评论[3])?
- 两个数组的顺序是否可能引用不同的记录,可能是由于性能增强?
我不太了解 Postgres 的内部结构,无法信任 array_agg 排序。
除非您明确指定,否则您不能假设任何关于应用聚合函数的顺序。如果你想确保对 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
考虑这个例子:
SELECT comment_date
, array_agg(user_id) users
, array_agg(comment) comments
FROM user_comments
GROUP BY comment_date
- 假设 users 和 comments 的索引引用相同的记录(例如,创建的 users[3]评论[3])?
- 两个数组的顺序是否可能引用不同的记录,可能是由于性能增强?
我不太了解 Postgres 的内部结构,无法信任 array_agg 排序。
除非您明确指定,否则您不能假设任何关于应用聚合函数的顺序。如果你想确保对 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