주문 테이블에서 사용자별 총 주문 금액을 합산하려고 합니다.
코드:
CREATE TABLE orders (
order_id INT,
user_id INT,
amount INT
);
INSERT INTO orders VALUES (1, 101, 1000), (2, 101, 2000), (3, 102, 1500);
SELECT user_id, order_id, SUM(amount)
FROM orders
GROUP BY user_id;
오류: Column 'orders.order_id' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.
시도: GROUP BY 뒤에 user_id만 적어봄. SELECT에서 order_id 삭제해봄.
질문: user_id별 합계를 구하면서 order_id 값도 같이 출력하려면 어떻게 해야 합니까?
모든 이야기1455
가벼운 안부부터 깊은 생각까지, 함께 나눠요.
총 1455개의 이야기
GROUP BY를 사용할 때는 SELECT 절에 집계 함수(SUM,AVG,COUNT등)를 사용하지 않은 모든 컬럼이 반드시GROUP BY절에 포함되어야 합니다. 현재 쿼리에서order_id는 사용자별로 여러 개가 존재할 수 있기 때문에, DB 입장에서는 어떤order_id를 출력해야 할지 결정할 수 없어 에러가 발생하는 것입니다.만약 사용자별 합계와 함께 개별 주문 번호를 모두 확인하고 싶으시다면,
GROUP BY대신 윈도우 함수인SUM() OVER()를 사용해 보세요.SELECT user_id, order_id, SUM(amount) OVER(PARTITION BY user_id) as total_amount FROM orders;와 같이 작성하면 행의 개수를 유지하면서 사용자별 합계를 함께 출력할 수 있습니다.