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 行为不正确

MobileSafari 的正确触摸按钮行为

在 WatchOS 中使用列表时滚动行为不正确

旋转后平移手势行为不正确

ace 编辑器光标行为不正确