본문 바로가기
「SQL초급떼기

[SQL day2] 프로그래머스- group by/having 중복행찾기

by DayGo 2023. 2. 4.

 

 

sql 실행순서 때문에 너무 헷갈린다.

6단계 

 

1. where

2. from

3. group by 

4. having  중복인 행 출력시 having 조건 활용 , group by 까지 한 이후 having 으로 최종 조건 적용

5. select   위에 조건을 만족할시 추출

6. order by  select 까지 마지막으로 한 다음 정렬함

https://myjamong.tistory.com/172

 

[Oracle] SQL SELECT 쿼리 실행 순서 처리 과정 :: 마이자몽

SELECT 쿼리 실행 순서 SQL 쿼리문을 작성할때 사용되는 WHERE, GROUP BY, ORDER BY 절과 같은 구문을 실행하는데 순서가 존재합니다. 이 순서에 의해서 쿼리가 처리되고 어떻게 쿼리문을 작성하느냐에 따

myjamong.tistory.com

 

 

<나의 첫 답안>

SELECT distinct USER_ID,PRODUCT_ID  /*어짜피 user_id와 product_id는 1:1관계이다*/
from ONLINE_SALE
group by USER_ID,PRODUCT_ID
order by USER_ID asc, PRODUCT_ID desc

 

--> 답안의 문제점!!! having 조건을 활용해서 중복인 행만 출력했어야한다!! 이렇게 하면 재구매 안한 회원도 출력되는 효과

 

 

<최종 정답>


SELECT USER_ID,PRODUCT_ID
FROM ONLINE_SALE
GROUP BY USER_ID, PRODUCT_ID
HAVING COUNT(online_sale_id) > 1
ORDER BY USER_ID ASC, PRODUCT_ID DESC;

 

<최종정답2>

select
    user_id, product_id
    # , count(*)
from online_sale
group by user_id, product_id
having count(*) >= 2
order by 1 asc, 2 desc

 

 

<최종정답3>


SELECT distinct USER_ID,PRODUCT_ID
from ONLINE_SALE
group by USER_ID,PRODUCT_ID
having count(*)>=2
order by 1 asc, 2 desc

 

 

참고할 포스트가 있어 공유한다.

https://kimsyoung.tistory.com/entry/SQL%EC%97%90%EC%84%9C-%EC%A4%91%EB%B3%B5%EA%B0%92-%EC%B0%BE%EB%8A%94-%EB%B0%A9%EB%B2%95

 

SQL에서 중복값 찾아내는 방법

중복된 데이터들을 시간 낭비에, 공간 낭비에, 돈 낭비일 때가 많습니다. 그래서 이번 시간에는 SQL의 GROUP BY와 HAVING 절을 활용해 중복값을 발견하고 이를 제거할 수 있는 방법에 관해 살펴보고자

kimsyoung.tistory.com

 

댓글