✅ 프로그래머스 문제 - 언어별 개발자 분류하기
https://school.programmers.co.kr/learn/courses/30/lessons/276036
✅ 코드
with FRONT AS (
SELECT SUM(CODE)
FROM SKILLCODES
WHERE CATEGORY = 'Front End'
)
SELECT
CASE
WHEN SKILL_CODE & (SELECT * FROM FRONT)
AND SKILL_CODE & (SELECT CODE FROM SKILLCODES WHERE NAME = 'python')
THEN 'A'
WHEN SKILL_CODE & (SELECT CODE FROM SKILLCODES WHERE NAME = 'C#')
THEN 'B'
WHEN SKILL_CODE & (SELECT * FROM FRONT)
THEN 'C'
END AS `GRADE`,
ID,
EMAIL
FROM
DEVELOPERS
HAVING
GRADE IS NOT NULL
ORDER BY GRADE, ID;
✏️ With 절
- 서브쿼리를 만들고 재사용 가능한 공동 테이블 표현식(Common Table Expression, CTE)
- 쿼리 단순화, 가독성 증가
- 반환된 data를 단일 쿼리에서 재사용 가능
WITH [cte_name] AS (
SELECT [COLUMN_NAME(S)]
FROM [TABLE_NAME]
WHERE [CONDITION]
)
SELECT [COLUMN_NAME(S)]
FROM [TABLE_NAME]
JOIN [CTE_NAME] ON [JOIN_CONDITION]
WHERE [CONDITION]
📚 설명
- WITH절로 FRONT END 언어 코드의 합을 저장
- GRADE의 각 경우의 수에 활용
✏️ 공부한점
- 쿼리 실행 순서는 FROM / JOIN → WHERE → GROUP BY → HAVING → SELECT → ORDER BY → LIMIT
인데 어떻게 HAVING이 필터링이 되는지 몰랐었다.
- SELECT의 컬럼 및 ALIAS절로 데이터 추출이 마지막에 수행되더라도 ALIAS절을 미리 인식해서 HAVING절에서 ALIAS를 사용할 수 있게 허용하는 DB가 있는데 MYSQL이 그 예이다.
- 다른 DBMS에서는 불가능하므로 가급적으로 사용하지않고 풀어야된다.
'Algorithm' 카테고리의 다른 글
| [SQL 알고리즘] 프로그래머스 - 입양 시각 구하기 (2) | 2024.12.03 |
|---|---|
| [SQL 알고리즘] 프로그래머스 - 식품분류별 가장 비싼 식품의 정보 조회하기 (2) | 2024.11.27 |
| [SQL 알고리즘] 프로그래머스 - 식품분류별 가장 비싼 식품의 정보 조회하기 (0) | 2024.11.27 |
| [SQL 알고리즘] 프로그래머스 - 저자 별 카테고리 별 매출액 집계하기 (2) | 2024.11.21 |
| [JAVA 알고리즘] charAt() 함수 (0) | 2024.04.04 |