File tree Expand file tree Collapse file tree 1 file changed +78
-0
lines changed Expand file tree Collapse file tree 1 file changed +78
-0
lines changed Original file line number Diff line number Diff line change
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;
You can’t perform that action at this time.
0 commit comments