Alias referencing
Important Notes
Aliases defined in the SELECT clause cannot be referenced in the WHERE clause (this is due to SQL's logical processing order)
Aliases can be referenced in GROUP BY, HAVING, and ORDER BY clauses
For column aliases with spaces or special characters, use double quotes
For cases where your V16 Statement references aliases in WHERE clause, below are 3 possible options of re-writing the SQL:
V16 SQL
V17 possible conversions
Key Differences Summarized
Return Value
Single value (1 row, 1 column)
Result set (multiple rows/columns)
Result set (multiple rows/columns) for each outer row
Placement
SELECT
list, WHERE
, HAVING
, expressions
WITH
clause at query start
FROM
clause (with JOIN LATERAL
)
Correlation
Can be correlated or non-correlated
Cannot directly reference outer query columns
Explicitly correlated to preceding tables
Reusability
No direct reuse of the subquery itself
Yes, can be referenced multiple times
No direct reuse of the LATERAL subquery's definition (it's tied to the JOIN
)
Primary Goal
Get a single value for an expression/comparison
Modularize complex queries, enable recursion
Row-dependent set retrieval ("Top-N per group")
Analogy
A function call returning a single value
A named view for a single query
A function call that generates a table for each row
When to Use Each
CTE
Breaking down complex queries
Materialized separately
LATERAL Join
Row-wise joins with correlations
Optimized like a join
Scalar Subquery
Simple single-value lookups
Slow for large datasets
Last updated