TIL(24.07.20.)

codataffee·2024년 7월 20일

TIL

목록 보기
103/135
post-thumbnail

#INTRO

Rainy season.


#코드카타

  • KATA #95

  • SQL

    • 비트 AND 연산 & :
      두 개의 숫자의 각 비트를 비교하여 두 비트가 모두 1일 때만 1이 되는 연산
    • CROSS JOIN
# Front End 스킬 코드들을 모두 합산하여 하나의 값으로 반환
WITH fe AS (
    SELECT SUM(CODE) AS CODE
    FROM SKILLCODES
    WHERE CATEGORY = 'Front End'
),
# Python 스킬 코드 값을 반환
py AS (
    SELECT CODE
    FROM SKILLCODES
    WHERE NAME = 'Python'
),
# C# 스킬 코드 값을 반환
cs AS (
    SELECT CODE
    FROM SKILLCODES
    WHERE NAME = 'C#'
)
SELECT 
    # 각 개발자의 스킬 코드를 검사하여 GRADE를 결정
    	 # Front End 스킬과 Python 스킬을 모두 가지고 있으면 'A'
    CASE WHEN (d.SKILL_CODE & fe.CODE) > 0 AND (d.SKILL_CODE & py.CODE) > 0 THEN 'A'
         # C# 스킬을 가지고 있으면 'B'
         WHEN (d.SKILL_CODE & cs.CODE) > 0 THEN 'B'
         # Front End 스킬만 가지고 있으면 'C'
         WHEN (d.SKILL_CODE & fe.CODE) > 0 THEN 'C'
         # 그 외는 'X' (필터링에서 제외될 값)
         ELSE 'X' END GRADE
  , d.ID
  , d.EMAIL
# DEVELOPERS 테이블에서 각 개발자의 정보를 조회
FROM DEVELOPERS d
     # 각 스킬 코드 값을 CROSS JOIN으로 결합
     CROSS JOIN fe
     CROSS JOIN py
     CROSS JOIN cs
# 'X'가 아닌 GRADE만 필터링하여 조회
HAVING GRADE != 'X'
# 결과를 GRADE와 ID를 기준으로 오름차순 정렬
ORDER BY GRADE, d.ID
  • 문제 접근 방법

    • 필요한 스킬 코드 추출 (WITH 절)
      fe CTE : Front End 스킬 코드들을 모두 합산하여 하나의 코드로 취합
      py CTE : Python 스킬 코드 추출
      cs CTE : C# 스킬 코드 추출

    • 개발자 정보와 스킬 코드 매칭 :
      DEVELOPERS 테이블과 스킬 코드 조인, 각 개발자의 스킬 코드 비교
      CASE 문을 사용하여 각 개발자의 SKILL_CODE를 검사하여 GRADE 결정
      Front End 스킬과 Python 스킬을 모두 가진 경우 GRADE는 'A'
      C# 스킬을 가진 경우 GRADE는 'B'
      Front End 스킬만 가진 경우 GRADE는 'C'
      그 외의 경우는 'X'로 설정하여 필터링에서 제외

    • 결과 정렬 및 필터링 :
      GRADE가 'X'가 아닌 경우만 필터링
      결과를 GRADE와 ID 기준으로 오름차순 정렬


#OUTRO

오늘의 한 줄.

알찬 주말이었다 : )

profile
커피 좋아하는 데이터 꿈나무

0개의 댓글