본문 바로가기

SQL/프로그래머스 SQL 고득점 kit

SQL 고득점 Kit / SELECT / 재구매가 일어난 상품과 회원 리스트 구하기 / MySQL

728x90

📚문제

📝풀이

SELECT USER_ID
     , PRODUCT_ID
FROM ONLINE_SALE
GROUP BY USER_ID,PRODUCT_ID
HAVING COUNT(*) >= 2
ORDER BY USER_ID, PRODUCT_ID DESC

USER_ID와 PRODUCT_ID로 그룹화 한것까지는 잘 됐는데

HAVING절 사용법에서 잠깐 헷갈렸다

 

WHERE절과의 차이점은 알고있는데 이렇게 한 번 헷갈리면 머릿속이 꼬이는 느낌

"GROUP화가 완료된 데이터들"에 대해서만 조건으로 필터링

(GROUP화된 데이터 안의 컬럼 사용해야함)

 

(+ 근데 GROUP화만 하고 모든행을 살펴보면 HAVING COUNT(*)>=2인 경우가 USER_ID =15,119인데

같은 물품을 2번주문한 기록이 없는데 왜 정답인지 모르겠다)

 

 

출처 : https://makand.tistory.com/entry/SQL-HAVING-%EA%B5%AC%EB%AC%B8

 

HAVING절에 대한 내용 찾아보다가 내가 찾고 있던 내용이 있어서 가져와봤다

이미 GROUP화 된 컬럼에 대해서는 몇개가 묶인건지 알 길이 없는데

HAVING과 집계함수를 사용하여 알 수 있다

(사실 그래도 좀 헷갈리지만... 많이 해봐야 될 것 같다)

 


SELECT USER_ID
     , PRODUCT_ID
FROM ONLINE_SALE 
GROUP BY USER_ID,PRODUCT_ID
HAVING COUNT(*) >= 2
ORDER BY USER_ID, PRODUCT_ID DESC

 

몇달 전까지만 해도 HAVING 사용법이 헷갈려서 블로그에 작성해놓았는데

지금 풀어보니까 바로 풀린다...

신기하네

역시 꾸준히 하면 조금씩 나아지는구나

앞으로도 계속 열심히 해야겠다

 

728x90