조건에 맞는 사용자와 총 거래금액 조회하기(Programmers)

minllny·2024년 5월 30일


프로그래머스 문제는 원하는 결과가 무엇인지 정확하게..??
안적혀있는 느낌이에요 ㅜㅜ

저의 답 쿼리입니다.

SELECT ugu.USER_ID
     , ugu.NICKNAME
     , SUM(PRICE) TOTAL_SALES
FROM USED_GOODS_BOARD ugb JOIN
     USED_GOODS_USER ugu ON ugb.WRITER_ID = ugu.USER_ID
WHERE STATUS = 'DONE' 
GROUP BY ugu.USER_ID
HAVING SUM(PRICE) >= 700000
ORDER BY TOTAL_SALES 

처음에 STATUS = 'DONE' 조건도 HAVING절에 넣어주었는데
GROUP BY를 해주어서 그런지 컬럼이 존재하지 않다고 오류나더라고요.

그래서 WHERE절로 빼줬더니 정상 출력되었습니다..

WHERE 절: 테이블에서 데이터를 선택할 때, GROUP BY 전에 조건을 지정하여 행을 필터링합니다.

HAVING 절: GROUP BY로 그룹화된 결과에 대해 조건을 지정하여 그룹을 필터링합니다.

질문하신 쿼리에서는 STATUS = 'DONE' 조건을 HAVING 절에 넣었을 때 오류가 발생한 이유는, HAVING 절이 그룹화된 결과를 필터링하는 데 사용되기 때문에, 그룹화된 열이 아닌 개별 행의 열에 조건을 적용하려고 할 때 오류가 발생하는 것입니다. STATUS 컬럼은 그룹핑된 결과에 존재하지 않기 때문에 발생하는 문제입니다.

따라서, STATUS = 'DONE' 조건은 그룹핑하기 전에 적용되어야 하므로 WHERE 절에 포함되어야 합니다. 반면에, SUM(PRICE) >= 700000 조건은 그룹핑된 결과에 적용되는 조건이므로 HAVING 절에 포함되어야 합니다.

'행'을 필터링할 때는 WHERE절에서 해줘야한다는 gpt의 말씀이십니다 ~ ㅋㅋ

역시 똑똑이 GPT 🤓🤓

profile
SQL 끄적끄적

0개의 댓글