• 카테고리

    질문 & 답변
  • 세부 분야

    데이터 분석

  • 해결 여부

    미해결

서브쿼리 해커랭스 Challenges 풀이

22.12.05 16:55 작성 조회수 196

0

WITH COUNTER AS
SELECT H.hacker_id AS hacker_id, H.name AS name, COUNT(*) AS challenges_created
FROM Hackers AS H LEFT JOIN Challenges AS C ON H.hacker_id = C.hacker_id
GROUP BY hacker_id

SELECT hacker_id, name, challenges_created
FROM COUNTER 
WHERE challenges_created NOT IN (SELECT challenges_created FROM(SELECT *
                                 FROM COUNTER 
                                 GROUP BY challenges_created HAVING COUNT(*)>=2))
OR challenges_created >= (SELECT challenges_created FROM COUNTER ORDER BY challenges_created LIMIT 1)
ORDER BY challenges_created DESC, hacker_id; 


이렇게 풀면 왜 답이 안나오는지 잘 모르겠습니다.ㅠㅠ

challenges_created값이 중복일때 제거해주는 부분 NOT IN 절에 오류가 있는 것 같ㅇ느데 어떤 부분이 틀린걸까요

답변 1

답변을 작성해보세요.

1

  1. WITH 문은 괄호와 함께 써 주셔야 합니다. WITH AS ( SELECT 쿼리 )

     

  2. WITH 문 쿼리와, NOT IN 절 쿼리 두 부분 모두 GROUP BY를 사용한 방법에 오류가 있습니다. GROUP BY로 그룹을 묶어주었을 때 SELECT 절에는 그룹을 묶는 기준 컬럼(GROUP BY 절에 쓴 컬럼)과, 그룹별로 적용된 집계함수(MAX, MIN, COUNT 등)만 쓸 수 있습니다.
    그러므로 WITH 문 쿼리에서는 GROUP BY 절에 name도 같이 써 줘야 하고, NOT IN 절 쿼리에서는 SELECT *를 사용할 수 없습니다.