-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathCase study 2.sql
250 lines (162 loc) · 5.69 KB
/
Case study 2.sql
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
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
create database project3;
show database;
use project3
# table- users
user_id created_at company_id language activated_at state
create table users (
user_id int,
created_at varchar(100),
company_id int,
language varchar(50),
activated_at varchar(100),
state varchar(50));
show variables like 'secure_file_priv';
load data infile "C:/ProgramData/MySQL/MySQL Server 8.0/Uploads/users.csv"
into table users
fields terminated by ','
enclosed by '"'
lines terminated by '\n'
ignore 1 rows;
select * from users;
alter table users add column temp_created_at datetime;
UPDATE users SET temp_created_at = STR_TO_DATE(created_at, '%d-%m-%Y %H:%i');
alter table users drop column created_at;
alter table users change column temp_created_at created_at datetime;
# table-2 events
create table events(
user_id int,
occurred_at varchar(100),
event_type varchar(50),
EVENT_NAME varchar(100),
location varchar(50),
device varchar(50),
user_type int
);
load data infile "C:/ProgramData/MySQL/MySQL Server 8.0/Uploads/events.csv"
into table events
fields terminated by ','
enclosed by '"'
lines terminated by '\n'
ignore 1 rows;
desc events;
SELECT * FROM events;
ALTER TABLE events add column temp_occurred_at datetime;
UPDATE events SET temp_occurred_at = STR_TO_DATE(occurred_at, '%d-%m-%Y %H:%i');
alter table events drop column occurred_at;
alter table events change column temp_occurred_at occurred_at datetime;
# table 3 emailevents
create table emailEvents(
user_id int,
occurred_at varchar(100),
action varchar(100),
user_type int
);
load data infile "C:/ProgramData/MySQL/MySQL Server 8.0/Uploads/email_events.csv"
into table emailEvents
fields terminated by ','
enclosed by '"'
lines terminated by '\n'
ignore 1 rows;
select * from emailEvents;
ALTER TABLE emailevents add column temp_occurred_at datetime;
UPDATE emailevents SET temp_occurred_at = STR_TO_DATE(occurred_at, '%d-%m-%Y %H:%i');
alter table emailevents drop column occurred_at;
alter table emailevents change column temp_occurred_at occurred_at datetime;
select * from events;
-- 1 Weekly User Engagement:Objective: Measure the activeness of users on a weekly basis.Your Task: Write an SQL query to calculate the weekly user engagement.
SELECT
DATE_FORMAT(occurred_at, '%W') AS week_start,
COUNT(DISTINCT user_id) AS weekly_active_users
FROM
events
GROUP BY
week_start;
-- 2 User Growth Analysis
SELECT
DATE_FORMAT(occurred_at, '%Y-%m') AS signup_month,
COUNT(DISTINCT user_id) AS new_users
FROM
events
GROUP BY
signup_month;
-- 3 Weekly Retention Analysis
select * from events;
SELECT
MONTH(this_month.occurred_at) AS month,
COUNT(DISTINCT last_month.user_id) AS retained_users
FROM
events this_month
LEFT JOIN
events last_month ON this_month.user_id = last_month.user_id
AND DATEDIFF(this_month.occurred_at, last_month.occurred_at) = 1
GROUP BY
MONTH(this_month.occurred_at);
-- 4 Weekly Engagement Per Device
SELECT
DATE_FORMAT(occurred_at, '%Y-%m-%d') AS week_start,
events.device,
COUNT(DISTINCT events.user_id) AS weekly_active_users
FROM
events
GROUP BY
week_start, events.device;
-- # table 3 enet email
-- user_id occurred_at action user_type
-- 5 Email Engagement Analysis by mahendra singh
select * from emailevents;
SELECT
DATE(occurred_at) AS email_date,
COUNT(DISTINCT user_id) AS total_users,
COUNT(DISTINCT CASE WHEN action = 'email_open' THEN user_id END) AS opened_emails,
COUNT(DISTINCT CASE WHEN action = 'email_clickthrough' THEN user_id END) AS clicked_links,
COUNT(DISTINCT CASE WHEN action = 'sent_weekly_digest' THEN user_id END) AS weekly_digest,
COUNT(DISTINCT CASE WHEN action = 'sent_reengagement_email' THEN user_id END) AS sent_reengagment
FROM
emailevents
WHERE
action IN ('email_open', 'email_clickthrough', 'sent_weekly_digest', 'sent_reengagement_email') -- Filter relevant actions
GROUP BY
email_date
ORDER BY
email_date;
-- precticing-------------------------------------------------------------------------------------------------------------------
-- tables of it email_open email_clickthrough sent_weekly_digest sent_reengagement_email
-- precticing email engagements per month
SELECT
month(occurred_at) AS month,
COUNT(DISTINCT user_id) AS total_users,
COUNT(DISTINCT CASE WHEN action = 'email_open' THEN user_id END) AS opened_emails,
COUNT(DISTINCT CASE WHEN action = 'email_clickthrough' THEN user_id END) AS clicked_links,
COUNT(DISTINCT CASE WHEN action = 'sent_weekly_digest' THEN user_id END) AS weekly_digest,
COUNT(DISTINCT CASE WHEN action = 'sent_reengagement_email' THEN user_id END) AS sent_reengagment
FROM
emailevents
WHERE
action IN ('email_open', 'email_clickthrough', 'sent_weekly_digest', 'sent_reengagement_email') -- Filter relevant actions
GROUP BY
month
ORDER BY
month;
-- user_id occurred_at event_type event_name location device user_type
SELECT
MONTH(this_month.occurred_at) AS month,
COUNT(DISTINCT last_month.user_id) AS retained_users
FROM
events this_month
LEFT JOIN
events last_month ON this_month.user_id = last_month.user_id
AND DATEDIFF(this_month.occurred_at, last_month.occurred_at) = 1
GROUP BY
MONTH(this_month.occurred_at);
-- prectining
select * from events;
select * from events;
SELECT
month(this_month.occurred_at) as month,
COUNT(DISTINCT last_month.user_id) AS retained_users
from
events this_month
left join
events occured_at last_month on occured_at this_month
on this_month.user_id=last_month,user_id and datediff(last_month.occured_at,this_month.occured_at)=1
group by month(this_month.occurred_at)