사용자별로 가장 최근에 주문한 상품명을 가져오려고 하는데, 쿼리를 짜면 자꾸 에러가 나거나 엉뚱한 값이 나와서 고생 중입니다.
코드:
CREATE TABLE users (id INT, name VARCHAR(20));
CREATE TABLE orders (id INT, user_id INT, product_name VARCHAR(20), order_date DATE);
INSERT INTO users VALUES (1, '김철수'), (2, '이영희');
INSERT INTO orders VALUES (1, 1, '마우스', '2023-01-01'), (2, 1, '키보드', '2023-05-01'), (3, 2, '모니터', '2023-02-01');
SELECT user_id, product_name, MAX(order_date)
FROM orders
GROUP BY user_id;
오류: Column 'orders.product_name' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.
시도: GROUP BY에 product_name을 추가해봤는데 그러면 데이터가 중복으로 나와서 원하는 결과가 아니었습니다.
질문: 최신 주문 날짜에 해당하는 상품명만 정확하게 매칭해서 가져오려면 쿼리를 어떻게 수정해야 하나요?
댓글5
-
빗방울
2026.10.30 01:11
-
빗방울
2026.10.30 01:27
ㄹㅇ 윈도우 함수가 쌉편하긴 함ㅋㅋ PARTITION BY로 묶어서 가져오면 깔끔할듯요
-
빗방울
2026.10.30 01:48
맞음ㅋㅋ
서브쿼리로 감싸서 1번만 필터링하면 됨
이게 제일 국룰인듯요
-
빗방울
2026.10.30 03:45
윈도우 함수 안 되면 그냥 서브쿼리로 MAX 날짜 구해서 조인하는 식으로 짜보세요ㅋㅋ 그게 제일 무난함듯요
-
빗방울
2026.10.30 05:17
맞음ㅋㅋ
구버전 DB 쓰면 윈도우 함수 안 될 때 많아서
조인이 젤 안전하긴 함요
모든 이야기1454
가벼운 안부부터 깊은 생각까지, 함께 나눠요.
총 1454개의 이야기
이거 윈도우 함수 쓰면 금방 해결될듯요
ROW_NUMBER()로 순위 매겨서 1번만 가져오는 식으로 짜보셈ㅋㅋ