BigQuery
SELECT list expression references column amount which is neither grouped nor aggregated at [12:7]
sooyeoon
2024. 11. 3. 01:58
SELECT list expression references column amount which is neither grouped nor aggregated at [12:7]
실행했던 코드
-- SELECT *
-- FROM advanced.orders
SELECT
SUM(amount),
SUM(amount) OVER (ORDER BY order_id ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS cumulative_sum,
SUM(amount) OVER (PARTITION BY user_id ORDER BY order_id) AS cumulative_sum_by_user,
AVG(amount) OVER (ORDER BY order_id ROWS BETWEEN 5 PRECEDING AND 1 PRECEDING) AS last_5_order_avg_amount
FROM advanced.orders
ORDER BY order_id
오류해결 코드
-- SELECT *
-- FROM advanced.orders
SELECT
-- SUM(amount),
SUM(amount) OVER() AS amount_total, # OVER() 추가
SUM(amount) OVER (ORDER BY order_id ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS cumulative_sum,
SUM(amount) OVER (PARTITION BY user_id ORDER BY order_id) AS cumulative_sum_by_user,
AVG(amount) OVER (ORDER BY order_id ROWS BETWEEN 5 PRECEDING AND 1 PRECEDING) AS last_5_order_avg_amount
FROM advanced.orders
ORDER BY order_id
SUM() 집계함수 에서 PARTITION, ORDER BY 작성없이 OVER() 만 추가해도 실행될 수 있다.
오류가 발생했던 코드는 OVER 없이 집계함수로만 작성,
이후 컬럼들은 SELECT에서 OVER와 함께 윈도우 함수로 작성되어 오류가 발생했던 것 같다.
OVER()을 함께 작성해야 그룹화 없이도 다른 열과 함께 사용이 가능해지기 때문에,
GROUP BY를 사용하지 않고도 오류 없이 실행될 수 있었다.