0

我有这样的表:

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)

知道如何纠正这个吗?

4

1 回答 1

1

你似乎想要:

string_agg(distinct invoices.state, ',') as ALLSTATES

您可能还需要调整group by. 但是,您的查询比您提供的示例数据复杂得多,因此不清楚究竟需要进行哪些更改。

于 2021-01-20T19:08:27.250 回答