โ๋ฌธ์
https://school.programmers.co.kr/learn/courses/30/lessons/276034
๋ฌธ์ ์ค๋ช
SKILLCODES
ํ
์ด๋ธ์ ๊ฐ๋ฐ์๋ค์ด ์ฌ์ฉํ๋ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ ๋ํ ์ ๋ณด๋ฅผ ๋ด์ ํ
์ด๋ธ์
๋๋ค. SKILLCODES
ํ
์ด๋ธ์ ๊ตฌ์กฐ๋ ๋ค์๊ณผ ๊ฐ์ผ๋ฉฐ, NAME
, CATEGORY
, CODE
๋ ๊ฐ๊ฐ ์คํฌ์ ์ด๋ฆ, ์คํฌ์ ๋ฒ์ฃผ, ์คํฌ์ ์ฝ๋๋ฅผ ์๋ฏธํฉ๋๋ค. ์คํฌ์ ์ฝ๋๋ 2์ง์๋ก ํํํ์ ๋ ๊ฐ bit๋ก ๊ตฌ๋ถ๋ ์ ์๋๋ก 2์ ์ ๊ณฑ์๋ก ๊ตฌ์ฑ๋์ด ์์ต๋๋ค.
NAME | TYPE | UNIQUE | NULLABLE |
NAME | VARCHAR(N) | Y | N |
CATEGORY | VARCHAR(N) | N | N |
CODE | INTEGER | Y | N |
DEVELOPERS
ํ
์ด๋ธ์ ๊ฐ๋ฐ์๋ค์ ํ๋ก๊ทธ๋๋ฐ ์คํฌ ์ ๋ณด๋ฅผ ๋ด์ ํ
์ด๋ธ์
๋๋ค. DEVELOPERS
ํ
์ด๋ธ์ ๊ตฌ์กฐ๋ ๋ค์๊ณผ ๊ฐ์ผ๋ฉฐ, ID
, FIRST_NAME
, LAST_NAME
, EMAIL
, SKILL_CODE
๋ ๊ฐ๊ฐ ๊ฐ๋ฐ์์ ID, ์ด๋ฆ, ์ฑ, ์ด๋ฉ์ผ, ์คํฌ ์ฝ๋๋ฅผ ์๋ฏธํฉ๋๋ค. SKILL_CODE
์ปฌ๋ผ์ INTEGER ํ์
์ด๊ณ , 2์ง์๋ก ํํํ์ ๋ ๊ฐ bit๋ SKILLCODES
ํ
์ด๋ธ์ ์ฝ๋๋ฅผ ์๋ฏธํฉ๋๋ค.
NAME | TYPE | UNIQUE | NULLABLE |
ID | VARCHAR(N) | Y | N |
FIRST_NAME | VARCHAR(N) | N | Y |
LAST_NAME | VARCHAR(N) | N | Y |
VARCHAR(N) | Y | N | |
SKILL_CODE | INTEGER | N | N |
์๋ฅผ ๋ค์ด ์ด๋ค ๊ฐ๋ฐ์์ SKILL_CODE
๊ฐ 400 (=b'110010000')์ด๋ผ๋ฉด, ์ด๋ SKILLCODES
ํ
์ด๋ธ์์ CODE๊ฐ 256 (=b'100000000'), 128 (=b'10000000'), 16 (=b'10000') ์ ํด๋นํ๋ ์คํฌ์ ๊ฐ์ก๋ค๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค.
๋ฌธ์
DEVELOPERS
ํ
์ด๋ธ์์ Python์ด๋ C# ์คํฌ์ ๊ฐ์ง ๊ฐ๋ฐ์์ ์ ๋ณด๋ฅผ ์กฐํํ๋ ค ํฉ๋๋ค. ์กฐ๊ฑด์ ๋ง๋ ๊ฐ๋ฐ์์ ID, ์ด๋ฉ์ผ, ์ด๋ฆ, ์ฑ์ ์กฐํํ๋ SQL ๋ฌธ์ ์์ฑํด ์ฃผ์ธ์.
๊ฒฐ๊ณผ๋ ID๋ฅผ ๊ธฐ์ค์ผ๋ก ์ค๋ฆ์ฐจ์ ์ ๋ ฌํด ์ฃผ์ธ์.
์์
์๋ฅผ ๋ค์ด SKILLCODES
ํ
์ด๋ธ์ด ๋ค์๊ณผ ๊ฐ๊ณ ,
NAME | CATEGORY | CODE |
C++ | Back End | 4 |
JavaScript | Front End | 16 |
Java | Back End | 128 |
Python | Back End | 256 |
C# | Back End | 1024 |
React | Front End | 2048 |
Vue | Front End | 8192 |
Node.js | Back End | 16384 |
DEVELOPERS
ํ
์ด๋ธ์ด ๋ค์๊ณผ ๊ฐ๋ค๋ฉด
ID | FIRST_NAME | LAST_NAME | SKILL_CODE | |
D165 | Jerami | Edwards | jerami_edwards@grepp.co |
400 |
D161 | Carsen | Garza | carsen_garza@grepp.co |
2048 |
D164 | Kelly | Grant | kelly_grant@grepp.co |
1024 |
D163 | Luka | Cory | luka_cory@grepp.co |
16384 |
D162 | Cade | Cunningham | cade_cunningham@grepp.co |
8452 |
๋ค์๊ณผ ๊ฐ์ด DEVELOPERS
ํ
์ด๋ธ์ ํฌํจ๋ ๊ฐ๋ฐ์ ์ค Python ์คํฌ์ด๋ C# ์คํฌ์ ๊ฐ์ง ๊ฐ๋ฐ์์ ์ ๋ณด๊ฐ ๊ฒฐ๊ณผ์ ๋์์ผ ํฉ๋๋ค.
ID | FIST_NAME | LAST_NAME | |
D162 | cade_cunningham@grepp.co |
Cade | Cunningham |
D164 | kelly_grant@grepp.co |
Kelly | Grant |
D165 | jerami_edwards@grepp.co |
Jerami | Edwards |
- D162๋ฒ ๊ฐ๋ฐ์์ ๊ฒฝ์ฐ SKILL_CODE๊ฐ 8452 = 8192 + 256 +4 ๋ก Vue, Python, Cpp ์คํฌ์ ๋ณด์ ํ๊ณ ์์ต๋๋ค.
- D164๋ฒ ๊ฐ๋ฐ์์ ๊ฒฝ์ฐ SKILL_CODE๊ฐ 1024 ๋ก C# ์คํฌ์ ๋ณด์ ํ๊ณ ์์ต๋๋ค.
- D165๋ฒ ๊ฐ๋ฐ์์ ๊ฒฝ์ฐ SKILL_CODE๊ฐ 400 = 256 + 128 + 16 ์ผ๋ก Python, Java, JavaScript ์คํฌ์ ๋ณด์ ํ๊ณ ์์ต๋๋ค.
โ๐ปํ์ด
bit_or๋ผ๋ aggregation function์ ์ฌ์ฉํ์ฌ Python์ด๋ C# ์คํฌ์ ๊ฐ๋ฐ์ ์ฝ๋๋ฅผ ๊ฐ์ ธ์จ๋ค.
์ด๋ฅผ ๊ฐ ๊ฐ๋ฐ์๋ค์ SKILL_CODE์ ๋น๊ตํ์ฌ ๋์ํ๋ ๋นํธ๊ฐ ๋ชจ๋ 1์ด๋ผ๋ฉด 1์ ๋ฐํ.
์ฆ, python๊ณผ C# ์คํฌ ๋ ์ค ํ๋๋ผ๋ ๊ฐ์ง๊ณ ์๋ ๊ฐ๋ฐ์๋ฅผ ์์๋ผ ์ ์๋ค.
๐ป์ฝ๋
select ID, EMAIL, FIRST_NAME, LAST_NAME
from DEVELOPERS
where SKILL_CODE & (select bit_or(CODE)
from SKILLCODES
where NAME = 'Python' or NAME = 'C#')
order by ID