【发布时间】: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
标签: sql postgresql string-agg