-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmysql_study case_implementating sql.sql
More file actions
199 lines (173 loc) · 4.32 KB
/
Copy pathmysql_study case_implementating sql.sql
File metadata and controls
199 lines (173 loc) · 4.32 KB
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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
select * from ds_salaries;
-- 1. Apakah ada data yang NULL ?
select *
from
ds_salaries
where
work_year IS NULL
OR experience_level IS NULL
OR employment_type IS NULL
OR job_title IS NULL
OR salary IS NULL
OR salary_currency IS NULL
OR salary_in_usd IS NULL
OR employee_residence IS NULL
OR remote_ratio IS NULL
OR company_location IS NULL
OR company_size IS NULL;
-- 2. Melihat ada job tittle apa saja
SELECT DISTINCT -- Untuk menghapus duplikat
job_title
FROM
ds_salaries
ORDER BY -- Untuk mengurutkan agar rapih berdasarkan kolom job_title
job_title;
-- 3. Job title apa saja yang berkaitan dengan data analyst
SELECT
DISTINCT job_title
FROM
ds_salaries
WHERE
job_title LIKE '%data analyst%' -- Menggunakan klausa LIKE dan ditambahkan persen agar kata data analyst yang di awal maupun akhir akan ditampilkan
ORDER BY
job_title;
-- 4. Berapa rata-rata gaji data analyst?
SELECT
AVG(salary_in_usd) AS avg_salary_in_usd
FROM
ds_salaries;
-------------------
SELECT -- Select inituh untuk mencari tau rata-rata dalam rupiah perbulannya
AVG(salary_in_usd) * 15000 / 12 AS avg_salary_in_rp_monthly
FROM
ds_salaries;
-- Revisi jawaban no. 4 harusnya ada tambahan klausa where untuk memfilter data analys saja
SELECT
AVG(salary_in_usd) AS avg_salary_in_usd
FROM
ds_salaries
WHERE
job_title LIKE '%data analyst%';
-- 4.1 Berapa rata-rata gaji data analyst berdasarkan experience levelnya?
SELECT
experience_level,
(AVG(salary_in_usd) * 15000) / 12 AS avg_sal_rp_monthly
FROM
ds_salaries
WHERE
job_title LIKE '%data analyst%'
GROUP BY -- GROUP BY itu untuk mengklasifikasikan, sedangkan order by merapihkan klasifikasinya
experience_level;
-- Revisi jawaban nomor 4.2.
SELECT
experience_level,
employment_type,
(AVG(salary_in_usd) * 15000) / 12 AS avg_sal_rp_monthly
FROM
ds_salaries
WHERE
job_title LIKE '%data analyst%'
GROUP BY
experience_level,
employment_type
ORDER BY
experience_level,
employment_type;
-- 5. Negara dengan gaji yang menarik untuk posisi data analyst, full time, exp kerjanya entry level dan menengah / mid
SELECT
company_location,
AVG(salary_in_usd) avg_sal_in_usd -- alias gak perlu pakai AS juga tetap jalan
FROM
ds_salaries
WHERE
job_title LIKE '%data analyst%'
AND employment_type = 'FT'
AND experience_level IN ('MI', 'EN')
GROUP BY -- GROUP BY Ini hany untuk agregat
company_location
HAVING -- HAVING juga untuk filter agregat
avg_sal_in_usd >= 20000;
-- 6. Di tahun berapa, kenaikan gaji dari mid ke senior itu memiliki kenaikan yang tertinggi?
-- (untuk pekerjaan yang berkaitan dengan data analyst yang penuh waktu
WITH ds_1 AS (
SELECT
work_year,
AVG(salary_in_usd) sal_in_usd_ex
FROM
ds_salaries
WHERE
employment_type = 'FT'
AND experience_level = 'EX'
AND job_title LIKE '%data analyst%'
GROUP BY
work_year
),
ds_2
AS (
SELECT
work_year,
AVG(salary_in_usd) sal_in_usd_mi
FROM
ds_salaries
WHERE
employment_type = 'FT'
AND experience_level = 'MI'
AND job_title LIKE '%data analyst%'
GROUP BY
work_year
),
t_year AS (
SELECT
DISTINCT work_year
FROM
ds_salaries
)
SELECT
t_year.work_year,
ds_1.sal_in_usd_ex,
ds_2.sal_in_usd_mi,
ds_1.sal_in_usd_ex - ds_2.sal_in_usd_mi differences
FROM
t_year
LEFT JOIN ds_1 ON ds_1.work_year = t_year.work_year
LEFT JOIN ds_2 ON ds_2.work_year = t_year.work_year;
-- Atau jika tidak mau menggunakan CTE year bisa digunakan subquery seperti di bawah
WITH ds_1
AS (
SELECT
work_year,
AVG(salary_in_usd) sal_in_usd_ex
FROM
ds_salaries
WHERE
employment_type = 'FT'
AND experience_level = 'EX'
AND job_title LIKE '%data analyst%'
GROUP BY
work_year
),
ds_2 AS (
SELECT
work_year,
AVG(salary_in_usd) sal_in_usd_mi
FROM
ds_salaries
WHERE
employment_type = 'FT'
AND experience_level = 'MI'
AND job_title LIKE '%data analyst%'
GROUP BY
work_year
)
SELECT
ds_1.work_year,
ds_1.sal_in_usd_ex,
ds_2.sal_in_usd_mi,
ds_1.sal_in_usd_ex - ds_2.sal_in_usd_mi differences
FROM
(
SELECT DISTINCT work_year
FROM ds_salaries
) t_year
LEFT JOIN ds_1 ON ds_1.work_year = t_year.work_year
LEFT JOIN ds_2 ON ds_2.work_year = t_year.work_year;