Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit e42a49e

Browse files
committed
배수빈: [SQL] 언어별 개발자 분류하기_241122
1 parent 1d224d5 commit e42a49e

File tree

1 file changed

+78
-0
lines changed

1 file changed

+78
-0
lines changed
Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,78 @@
1+
-- 코드를 작성해주세요
2+
-- GRADE가 존재하는 개발자의 GRADE별 개발자의 정보를 조회
3+
4+
-- CTE 이용
5+
WITH FE AS(
6+
SELECT SUM(CODE) AS CODE
7+
FROM SKILLCODES
8+
WHERE CATEGORY = "Front End"
9+
)
10+
, Python AS(
11+
SELECT CODE
12+
FROM SKILLCODES
13+
WHERE NAME = "Python"
14+
)
15+
, C AS(
16+
SELECT CODE
17+
FROM SKILLCODES
18+
WHERE NAME = "C#"
19+
)
20+
, GRADES AS(
21+
SELECT
22+
CASE
23+
WHEN d.SKILL_CODE & f.CODE !=0 AND d.SKILL_CODE & p.CODE !=0 THEN 'A'
24+
WHEN d.SKILL_CODE & c.CODE != 0 THEN 'B'
25+
WHEN d.SKILL_CODE & f.CODE != 0 THEN 'C'
26+
END AS GRADE
27+
, d.ID, d.EMAIL
28+
FROM DEVELOPERS d, FE f, Python p, C c
29+
)
30+
SELECT *
31+
FROM GRADES g
32+
WHERE GRADE IS NOT NULL
33+
ORDER BY g.GRADE, g.ID
34+
35+
-- 각 CTE를 테이블 처럼 암시적 조인으로 사용
36+
-- 각 개발자마다 CTE반복 참조하며 CASE WHEN조건 매번 계산
37+
38+
39+
40+
-- 최적화
41+
WITH FE AS (
42+
SELECT SUM(CODE) AS CODE
43+
FROM SKILLCODES
44+
WHERE CATEGORY = "Front End"
45+
),
46+
SKILLS AS (
47+
SELECT
48+
MAX(CASE WHEN NAME = "C#" THEN CODE END) AS C_CODE,
49+
MAX(CASE WHEN NAME = "Python" THEN CODE END) AS P_CODE,
50+
(SELECT CODE FROM FE) AS FE_CODE
51+
FROM SKILLCODES
52+
),
53+
DEVELOPER_FLAGS AS (
54+
SELECT
55+
d.ID,
56+
d.EMAIL,
57+
d.SKILL_CODE,
58+
(d.SKILL_CODE & s.FE_CODE) AS IS_FE,
59+
(d.SKILL_CODE & s.P_CODE) AS IS_PYTHON,
60+
(d.SKILL_CODE & s.C_CODE) AS IS_C
61+
FROM DEVELOPERS d
62+
CROSS JOIN SKILLS s
63+
),
64+
GRADES AS (
65+
SELECT
66+
CASE
67+
WHEN IS_FE != 0 AND IS_PYTHON != 0 THEN 'A'
68+
WHEN IS_C != 0 THEN 'B'
69+
WHEN IS_FE != 0 THEN 'C'
70+
END AS GRADE,
71+
ID,
72+
EMAIL
73+
FROM DEVELOPER_FLAGS
74+
)
75+
SELECT *
76+
FROM GRADES
77+
WHERE GRADE IS NOT NULL
78+
ORDER BY GRADE, ID;

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /