Это потому, что SQL оценивается в определенном порядке, например, сканирование таблицы, фильтр, агрегация, проекция, сортировка. Вы пытались использовать результат проекции в качестве ввода агрегации. Во многих случаях это может быть возможно (когда проекция тривиальна, как в вашем случае), но такое поведение не определено в ANSI SQL (за которым следует Presto и Афина).
Мы видим, что во многих В случаях, когда это очень полезно, поддержка этого может быть добавлена в будущем (расширение ANSI SQL).
В настоящее время есть несколько способов преодолеть это:
SELECT account, sum(revenue) as grossRevenue
FROM (SELECT substr(accountDescriptor, 5) as account, revenue FROM sales)
GROUP BY account
или
WITH better_sales AS (SELECT substr(accountDescriptor, 5) as account, revenue FROM sales)
SELECT account, sum(revenue) as grossRevenue
FROM better_sales
GROUP BY account
или
SELECT account, sum(revenue) as grossRevenue
FROM sales
LATERAL JOIN (SELECT substr(accountDescriptor, 5) as account)
GROUP BY account
или
SELECT substr(accountDescriptor, 5) as account, sum(revenue) as grossRevenue
FROM sales
GROUP BY 1;