string_agg 行为不正确
Posted
技术标签:
【中文标题】string_agg 行为不正确【英文标题】:string_agg not behaving correctly 【发布时间】:2021-04-25 04:46:33 【问题描述】:我有这样的桌子:
booking_id, state
01 red
01 green
01 black
02 red
02 green
03 red
我想得到这样的东西:
01 red,green,black
02 red,green
03 red
所以我在查询中添加了 string_agg 函数,但字段 ALLSTATES 正在返回如下结果:
01 red,red,red
01 green,green,green
01 black,black,black
02 red,red
02 green,green
03 red
这是我的查询:
SELECT bookings.id,
bookings.confirmed_at,
bookings.disputed,
bookings.no_show_claimed,
bookings.disputed_at,
bookings.no_show_blocked_until,
bookings.user_id,bookings.refunded,
bookings.refunded_at,invoices.id as invoice_id,
invoices.state,
invoices.currency_to_eur,
max(lessons.time),
greatest(max(lessons.time),
bookings.no_show_blocked_until,
bookings.confirmed_at),
string_agg(',',invoices.state) as ALLSTATES
FROM bookings LEFT JOIN invoice_lines ON invoice_lines.booking_id = bookings.id
LEFT JOIN invoices ON invoices.id = invoice_lines.invoice_id
LEFT JOIN lesson_bookings ON lesson_bookings.booking_id = bookings.id
LEFT JOIN lessons ON lessons.id = lesson_bookings.lesson_id
GROUP BY (bookings.id,invoices.id)
知道如何解决这个问题吗?
【问题讨论】:
您以错误的顺序使用 string_agg() 的输入,您首先设置分隔符,然后设置值,而它应该是:string_agg(值文本,分隔符文本)postgresql.org/docs/current/functions-aggregate.html 【参考方案1】:你似乎想要:
string_agg(distinct invoices.state, ',') as ALLSTATES
您可能还需要调整group by
。但是,您的查询比您提供的示例数据要复杂得多,因此不清楚具体需要进行哪些更改。
【讨论】:
感谢您的回答戈登。你是对的,问题来自我正在使用的小组。有没有办法保留它并添加另一个与我添加的 string_agg 一起使用的组? @FirasVonZgr 。 . .我建议问一个 new 问题。这个问题真的很难理解,因为解释和查询只是彼此无关。以上是关于string_agg 行为不正确的主要内容,如果未能解决你的问题,请参考以下文章
UINavigationController 中的 UIPageViewController,NavigationBar 行为不正确