강의로 돌아가기
박상준

풀이

SELECT
    CASE
        WHEN
            BIT_OR(category = "Front End") AND BIT_OR(S.name = "Python")
            THEN "A"
        WHEN
            BIT_OR(S.name = "C#")
            THEN "B"
        WHEN
            BIT_OR(category = "Front End")
            THEN "C"
        ELSE NULL
    END AS grade,
    id,
    email
FROM developers AS D
JOIN skillcodes AS S
    ON (D.skill_code & S.code) = S.code
GROUP BY id, email
HAVING grade IS NOT NULL
ORDER BY grade, id
  • soyoung7488@naver.com

    혹시 여기서 GROUP BY를 써야만 하는 이유를 알 수 있을까요?

    soyoung7488@naver.com―2024.04.16 14:15
  • soyoung7488@naver.com

    그리고 BIT_OR 함수를 CATEGORY와 같은 문자열에 쓸 수 있는 이유도 알 수 있을까요?

    soyoung7488@naver.com―2024.04.16 14:29
  • 박상준

    join을 하게 되면 지금 developers * 각자의 skillcode 개수 만큼의 record가 남아있는 거거든요? 근데 최종결과는 각 개발자 마다 하나씩만 나올 거니까 group by를 씁니다. 또 그렇게 해야 모든 skill을 고려할 수 있어서 조건체크가 가능하기도 하구요

    박상준―2024.04.16 15:36
  • 박상준

    BIT_OR은 지금 문자열에 쓴 게 아니라 ex) category = "Front End" 문자열과 문자열을 비교한 boolean 결과에 사용한 것이라 그렇습니다! BIT_OR이 aggregation 함수라서 쉽게 말하면 skill code중에 "아무거나 front end가 하나라도 있으면"을 검사하게 되는 거죠

    박상준―2024.04.16 15:36
0 개의 답변
답변 쓰기
이 입력폼은 마크다운 문법을 지원합니다. 마크다운 가이드 를 참고하세요.