distinct_id column.
WHERE / ORDER BY / LIMIT / OFFSET
The core row-shaping clauses. WHERE filters rows before grouping, ORDER BY sorts the result, LIMIT caps the number of rows returned, and OFFSET skips a number of leading rows (useful with ORDER BY for paging). SyntaxMost recent purchasers in the last 30 days
GROUP BY … HAVING
Aggregates rows into groups and then filters those groups with a HAVING condition. Unlike WHERE, HAVING can reference aggregate results such ascount(*).
Syntax
Users with more than three failed payments
IN (subquery)
Keeps rows whose value appears in the result of a subquery. A common way to include users who match a condition captured in another table. SyntaxUsers who have triggered a purchase
JOIN / LEFT JOIN
Combines rows from two tables on a join condition. A plain (inner) JOIN keeps only matching rows; a LEFT JOIN keeps every row from the left table. Unmatched right-side columns are filled with their type’s default value (an empty string for text), not NULL, soIS NULL can’t find rows without a match; use NOT IN (subquery) to build anti-joins.
Syntax
Pro-plan users who opened the app (inner join)
Users with no purchase in the last 30 days (NOT IN anti-join)
Derived table (subquery in FROM)
A subquery placed in the FROM clause and given an alias, so you can filter or aggregate over its result as if it were a table. SyntaxUsers with at least ten logins
CTE (WITH … AS)
A common table expression defines a named, temporary result set that you can reference later in the same query. Use it to break a complex segment into readable, composable steps. SyntaxUsers with more than five purchases
DISTINCT
Removes duplicate rows from the result set, returning each unique combination of the selected columns once. SyntaxUnique users who opened the app
UNION / UNION ALL
Combines the rows of two or more queries with matching columns. UNION removes duplicate rows (it is treated as UNION DISTINCT on ClickHouse), while UNION ALL keeps every row, including duplicates. SyntaxUsers who purchased or started a subscription
DISTINCT ON
Returns the first row for each distinct value of the given expressions. Pair it with ORDER BY to control which row is kept per group (for example, the most recent event per user). SyntaxOne row per user, keyed to their latest event
GROUP BY CUBE
Produces grouping sets for every combination of the listed expressions, including subtotal rows where a grouped expression is rolled up to NULL. Filter with HAVING to keep only the rows you want in the segment. SyntaxUsers grouped across page dimensions, keeping per-user rows
GROUP BY ROLLUP
Produces grouping sets in a hierarchy from most to least detailed, adding subtotal rows as each trailing expression is rolled up to NULL. Filter with HAVING to keep only the rows you want in the segment. SyntaxUsers grouped by purchase category, keeping per-user rows