문제 설명
문제 및 예시
문제는 너무 간단하고 테이블도 너무 간단해서 간단한 문제 같지만 간단하지 않았다는 것이 함정..
- COUNT(HOST_ID) >=2면 되는 것이 아닐까 하고 아주 간단한 생각을 했다
그 결과 오답 행렬
오답 1
SELECT ID, NAME, HOST_ID, COUNT(HOST_ID)
FROM PLACES
GROUP BY HOST_ID
HAVING COUNT(HOST_ID)>=2
ORDER BY ID
[실행 결과]
이렇게 쉽게 답이 나올 거라고 생각했다고???? 네..
문제점을 살펴보자
- 1. COUNT(HOST_ID)가 나오면 안됩니다...
- 2. 실행 결과에 HOST_ID가 같은 사람들 정보가 다 산출되어야 하는데 중복 삭제가 되버렸읍니다...
서브 쿼리 - 문제 해결의 시작 그리고 삽질의 시작
다행히 논리로는 COUNT(HOST_ID)가 하나의 행으로 추가가 되어서 2 이상인 사람을 추리면 되겠다는 결론까지는 잘 도달함.
근데 문제는 하나의 행으로 추가하는 방법을 모르는 나는 바보....
나름 서브쿼리 까지는 생각을 했는데 쓸데 없는 SELECT, WHERE절에 쓰고 있는 나를 어쩌면 좋을까...
#오답의 시작
SELECT PLACES.HOST_ID, ID, NAME, (SELECT HOST_ID, COUNT(HOST_ID)
FROM PLACES
GROUP BY HOST_ID
) C_ID
FROM TABLES
GROUP BY HOST_ID
HAVING C_ID >= 2
예 당연히 결과 안나오죠..이것을 WHERE절에서도 시도해본 사람 나야나....
검색어를 다양하게 해서 중복값 제거 안하고 산출 등 여러가지 검색을 해보았으나 대차게 실패^^
결국 질문 목록에 들어가게 되는데
거기서 마주한 서브조인...??!!!!!!!!!!!!
JOIN - 문제 해결의 실마리
이걸 보자마자 아! 행을 테이블로 만들어서 추가해준 다음에 걸러내면 내가 원하는 결과가 나오는 거잖아!
내 논리적 흐름이랑도 같자나! 나 왜 이 생각 못했는데!!!! 겉을 뱅뱅 돌다가 얻은 답은 값지다..
정답 - 이걸 몰랐냐고요? 네...알듯 말듯 했어요 그럼 모르는거죠?
SELECT ID, NAME, PLACES.HOST_ID
FROM
(SELECT HOST_ID, COUNT(HOST_ID) C_ID
FROM PLACES
GROUP BY HOST_ID
)A LEFT JOIN PLACES ON A.HOST_ID = PLACES.HOST_ID
WHERE C_ID >=2
ORDER BY ID
힌트를 얻고 문제 해결 성공...
세상에 이렇게 간단한 것을...
앞으로 행으로 추가해야겠다 싶을 땐 만들어서 붙여주면 된다. 꺆..!
또 하나 알았다!! 그럼 됐지 뭐!
휴 오늘도 하나 넘었다.
'SQL > 코드카타' 카테고리의 다른 글
[프로그래머스] 자동차 대여 기록에서 대여중/대여 가능 여부 구분하기 (0) | 2024.09.04 |
---|