array_agg

Collects values into an array.

Syntax

array_agg(<expr>)

Arguments

ArgumentTypeDescription
<expr>Any typeInput value.

Returns

Returns array. Includes NULL values. Returns [] for empty input.

Usage notes

Use WITHIN GROUP ORDER BY before AGGREGATE to define element order.

Examples

Collect each session’s events in sequence, even when the input rows arrive out of order:

VALUES
    ('s-17', 3, 'payment_failed'), ('s-17', 1, 'cart_viewed'),
    ('s-17', 2, 'checkout_started'), ('s-42', 2, 'payment_completed'),
    ('s-42', 1, 'checkout_started')
SELECT $0 AS session_id, $1 AS sequence, $2 AS event
GROUP BY session_id
WITHIN GROUP ORDER BY sequence
AGGREGATE array_agg(event) AS journey
ORDER BY session_id
+------------+-----------------------------------------------------+
| session_id | journey                                             |
+------------+-----------------------------------------------------+
| s-17       | ["cart_viewed","checkout_started","payment_failed"] |
| s-42       | ["checkout_started","payment_completed"]            |
+------------+-----------------------------------------------------+

ORDER BY session_id sorts result rows; WITHIN GROUP ORDER BY sequence sorts the elements inside each array.