일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
Tags
- 조합
- counter
- programmers
- CodingTest
- import re
- 코딩
- 코테
- coding test
- Level2
- itertools
- 코딩테스트
- time complexity
- coding
- 완전탐색
- 파이썬
- lambda
- collections
- python
- 데이터분석
- BFS
- level4
- join
- sql
- mysql
- Stack
- 시간복잡도
- Queue
- lv4
- 프로그래머스
- 연습문제
- Today
- Total
ror_coding
[Programmers Lv.4] 언어별 개발자 분류하기 - 276036 본문
728x90
728x90
BIT_OR( ) 을 사용하여 특정 SKILL_CODE와 비교가 가능하게 한다.
Question
DEVELOPERS 테이블에서 GRADE별 개발자의 정보를 조회하려 합니다. GRADE는 다음과 같이 정해
집니다.
A : Front End 스킬과 Python 스킬을 함께 가지고 있는 개발자
B : C# 스킬을 가진 개발자
C : 그 외의 Front End 개발자
GRADE가 존재하는 개발자의 GRADE, ID, EMAIL을 조회하는 SQL 문을 작성해 주세요.
결과는 GRADE와 ID를 기준으로 오름차순 정렬해 주세요.
Point
- BIT_OR( ) : 여러 행의 값을 받아 각각의 비트에 대해 OR 연산을 수행한 결과를 반환.
- CASE 구문에서 0보다 큰지 확인하는 이유 : 비트 플래그는 정수로 표현되며, 비트가 활성화되지 않으면 결과는 0임.
- => 따라서 Python이면서 SKILL_CODE가 같으면 해당 & 연산 결과가 CODE 로 출력되기 때문에 조건에 해당하는 비트 값 즉, CODE 가 출력됨. (따라서 이는 0 이상이기 때문에 TRUE.)
Code
SELECT
CASE
WHEN (SKILL_CODE & (SELECT CODE FROM SKILLCODES WHERE NAME = 'Python')) AND
(SKILL_CODE & (SELECT BIT_OR(CODE) FROM SKILLCODES WHERE CATEGORY = 'Front End')) > 0 THEN 'A'
WHEN (SKILL_CODE & (SELECT CODE FROM SKILLCODES WHERE NAME = 'C#')) THEN 'B'
WHEN (SKILL_CODE & (SELECT BIT_OR(CODE) FROM SKILLCODES WHERE CATEGORY = 'Front End')) > 0 THEN 'C'
END AS GRADE,
ID,
EMAIL
FROM DEVELOPERS
HAVING GRADE IS NOT NULL
ORDER BY 1, 2
![](https://t1.daumcdn.net/keditor/emoticon/friends1/large/017.gif)
now me
On my github
728x90
'Algorithm > SQL' 카테고리의 다른 글
[Programmers Lv.5] 멸종위기의 대장균 찾기 - 301651 (0) | 2025.01.16 |
---|---|
[Programmers Lv.5] 상품을 구매한 회원 비율 구하기 - 131534 (0) | 2025.01.16 |
[Programmers Lv.4] 특정 기간동안 대여 가능한 자동차들의 대여비용 구하기 - 157339 (0) | 2025.01.12 |
[Programmers Lv.4] FrontEnd 개발자 찾기 - 276035 (0) | 2025.01.12 |
[Programmers Lv.4] 자동차 대여 기록 별 대여 금액 구하기 - 151141 (0) | 2025.01.05 |