KATA#95

codataffee·2024년 7월 20일
0

CODEKATA

목록 보기
95/114
post-thumbnail

WHAT IS KATA?

KATA는 기술과 기술 향상에 초점을 맞춘 코드 챌린지입니다.
일부는 프로그래밍 기본 사항을 교육하는 반면 다른 일부는 복잡한 문제 해결에 중점을 둡니다.

이 용어는 The Pragmatic Programmer 라는 책의 공동 저자인 Dave Thomas 가
무술에서 일본의 카타 개념을 인정하면서 처음 만들어졌습니다.
Dave의 개념 버전은 코드 카타를 프로그래머가
연습과 반복을 통해 기술을 연마하는 데 도움이 되는 프로그래밍 연습으로 정의합니다.


- SQL


프로그래머스에서 SQL 문제 풀기

✔️ 문제 #1: 언어별 개발자 분류하기

문제

  • 개발자들의 스킬에 따라 등급(GRADE)을 나누는 쿼리 작성
    • A: Front End 스킬과 Python 스킬을 함께 가진 개발자
    • B: C# 스킬을 가진 개발자
    • C: 그 외의 Front End 개발자
  • 각 개발자의 GRADE, ID, EMAIL을 조회하고,
    GRADE와 ID를 기준으로 오름차순 정렬

✔️ 제출 쿼리

✔️ 쿼리 분석

# 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


✔️ CHECK POINT

  • 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 기준으로 오름차순 정렬

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

0개의 댓글

관련 채용 정보