-
Notifications
You must be signed in to change notification settings - Fork 23
/
Copy path1_sql_tasks.sql
303 lines (271 loc) · 8.33 KB
/
1_sql_tasks.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
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
---
SELECT COUNT(status)
FROM company
GROUP BY status
HAVING status LIKE 'closed';
---
SELECT funding_total
FROM company
WHERE category_code LIKE 'news'
AND country_code LIKE 'USA'
ORDER BY funding_total DESC;
---
SELECT SUM(price_amount)
FROM acquisition
WHERE term_code LIKE 'cash'
AND EXTRACT(YEAR from acquired_at) BETWEEN 2011 AND 2013
GROUP BY term_code;
---
SELECT first_name,
last_name,
twitter_username
FROM people
WHERE twitter_username LIKE 'Silver%';
---
SELECT *
FROM people
WHERE twitter_username LIKE '%money%'
AND last_name LIKE 'K%';
---
SELECT country_code,
SUM(funding_total)
FROM company
GROUP BY country_code
ORDER BY SUM(funding_total) DESC;
---
SELECT funded_at,
MIN(raised_amount),
MAX(raised_amount)
FROM funding_round
GROUP BY funded_at
HAVING MIN(raised_amount) NOT IN (0, MAX(raised_amount));
---
SELECT *,
CASE
WHEN invested_companies >= 100 THEN 'high_activity'
WHEN invested_companies BETWEEN 20 AND 99 THEN 'middle_activity'
ELSE 'low_activity'
END
FROM fund;
---
SELECT CASE
WHEN invested_companies>=100 THEN 'high_activity'
WHEN invested_companies>=20 THEN 'middle_activity'
ELSE 'low_activity'
END AS activity,
ROUND(AVG(investment_rounds))
FROM fund
GROUP BY activity
ORDER BY ROUND(AVG(investment_rounds));
---
SELECT country_code,
MIN(invested_companies),
MAX(invested_companies),
AVG(invested_companies)
FROM (SELECT *
FROM fund
WHERE EXTRACT(YEAR FROM founded_at) BETWEEN 2010 AND 2012) AS f
GROUP BY country_code
HAVING MIN(invested_companies) > 0
ORDER BY AVG(invested_companies) DESC
LIMIT 10;
---
SELECT p.first_name,
p.last_name,
e.instituition
FROM people AS p
LEFT JOIN education AS e ON p.id = e.person_id;
---
SELECT c.name,
COUNT(DISTINCT tab2.instituition)
FROM company AS c
LEFT JOIN
(SELECT tab1.instituition,
p.company_id
FROM
(SELECT person_id,
instituition
FROM education
WHERE instituition IS NOT NULL
) AS tab1
INNER JOIN people AS p ON p.id = tab1.person_id
) AS tab2 ON tab2.company_id = c.id
GROUP BY c.name
ORDER BY COUNT(DISTINCT tab2.instituition) DESC
LIMIT 5;
---
SELECT DISTINCT name
FROM company
WHERE status LIKE 'closed'
AND id IN (SELECT company_id
FROM funding_round
WHERE is_first_round = 1
AND is_last_round = 1);
---
SELECT DISTINCT p.id
FROM company AS c
INNER JOIN people AS p ON c.id = p.company_id
WHERE c.status LIKE 'closed'
AND c.id IN (SELECT company_id
FROM funding_round
WHERE is_first_round = 1
AND is_last_round = 1);
---
SELECT DISTINCT p.id,
e.instituition
FROM company AS c
INNER JOIN people AS p ON c.id = p.company_id
LEFT JOIN education AS e ON p.id = e.person_id
WHERE c.status LIKE 'closed'
AND c.id IN (SELECT company_id
FROM funding_round
WHERE is_first_round = 1
AND is_last_round = 1)
AND e.instituition IS NOT NULL;
---
SELECT DISTINCT p.id,
COUNT(e.instituition)
FROM company AS c
INNER JOIN people AS p ON c.id = p.company_id
LEFT JOIN education AS e ON p.id = e.person_id
WHERE c.status LIKE 'closed'
AND c.id IN (SELECT company_id
FROM funding_round
WHERE is_first_round = 1
AND is_last_round = 1)
AND e.instituition IS NOT NULL
GROUP BY p.id;
---
SELECT AVG(tab1.count_in)
FROM (SELECT DISTINCT p.id,
COUNT(e.instituition) AS count_in
FROM company AS c
INNER JOIN people AS p ON c.id = p.company_id
LEFT JOIN education AS e ON p.id = e.person_id
WHERE c.status LIKE 'closed'
AND c.id IN (SELECT company_id
FROM funding_round
WHERE is_first_round = 1
AND is_last_round = 1)
AND e.instituition IS NOT NULL
GROUP BY p.id) AS tab1;
---
SELECT AVG(tab1.count_in)
FROM (SELECT DISTINCT p.id,
COUNT(e.instituition) AS count_in
FROM company AS c
INNER JOIN people AS p ON c.id = p.company_id
LEFT JOIN education AS e ON p.id = e.person_id
WHERE c.name LIKE 'Facebook'
AND e.instituition IS NOT NULL
GROUP BY p.id
) AS tab1;
---
SELECT f.name AS name_of_fund,
C.name AS name_of_company,
fr.raised_amount AS amount
FROM investment AS i
JOIN company AS c ON i.company_id=c.id
JOIN fund AS f ON i.fund_id=f.id
JOIN funding_round AS fr ON i.funding_round_id = fr.id
WHERE EXTRACT(YEAR FROM fr.funded_at) BETWEEN 2012 AND 2013
AND c.milestones > 6;
---
SELECT company.name AS acquiring_company,
tab2.price_amount,
tab2.acquired_company,
tab2.funding_total,
ROUND(tab2.price_amount / tab2.funding_total)
FROM
(
SELECT c.name AS acquired_company,
c.funding_total,
tab1.acquiring_company_id,
tab1.price_amount
FROM company AS c
RIGHT JOIN (
SELECT acquiring_company_id,
acquired_company_id,
price_amount
FROM acquisition
WHERE price_amount > 0
) AS tab1 ON c.id = tab1.acquired_company_id
) AS tab2 LEFT JOIN company ON company.id = tab2.acquiring_company_id
WHERE tab2.funding_total > 0
ORDER BY tab2.price_amount DESC, tab2.acquired_company
LIMIT 10;
---
SELECT c.name,
tab1.month
FROM company AS c
RIGHT JOIN (
SELECT company_id,
EXTRACT(MONTH FROM funded_at) AS month
FROM funding_round
WHERE EXTRACT(YEAR FROM funded_at) BETWEEN 2010 AND 2013
) AS tab1 ON c.id = tab1.company_id
WHERE c.category_code LIKE 'social';
---
WITH
-- выбираем месяц инвестиционных раундов в 2010-2013 гг
tab1 AS (SELECT EXTRACT(MONTH FROM funded_at) AS month,
id AS funding_round_id
FROM funding_round
WHERE EXTRACT(YEAR FROM funded_at) BETWEEN 2010 AND 2013
),
-- считаем кол-во купленных и общую сумму по сделкам за 2010-2013 гг в разрезе месяца
tab2 AS (SELECT EXTRACT(MONTH FROM acquired_at) AS month,
COUNT(acquired_company_id) AS count_acquired,
SUM(price_amount) AS total_amount
FROM acquisition
WHERE EXTRACT(YEAR FROM acquired_at) BETWEEN 2010 AND 2013
GROUP BY EXTRACT(MONTH FROM acquired_at)
),
-- ищем фонды из США
tab3 AS (SELECT i.funding_round_id,
f.name
FROM investment AS i
JOIN fund AS f ON f.id = i.fund_id
WHERE fund_id IN (SELECT id
FROM fund
WHERE country_code LIKE 'USA')
),
tab4 AS (SELECT month,
COUNT(DISTINCT name) AS count_USA
FROM tab1
LEFT JOIN tab3 ON tab1.funding_round_id = tab3.funding_round_id
GROUP BY month)
SELECT tab4.month,
tab4.count_USA,
tab2.count_acquired,
tab2.total_amount
FROM tab4
LEFT JOIN tab2 ON tab4.month = tab2.month;
---
WITH
total_11 AS (SELECT AVG(funding_total) AS total_2011,
country_code
FROM company
GROUP BY country_code,
EXTRACT(YEAR FROM founded_at)
HAVING EXTRACT(YEAR FROM founded_at) = 2011),
total_12 AS (SELECT AVG(funding_total) AS total_2012,
country_code
FROM company
GROUP BY country_code,
EXTRACT(YEAR FROM founded_at)
HAVING EXTRACT(YEAR FROM founded_at) = 2012),
total_13 AS (SELECT AVG(funding_total) AS total_2013,
country_code
FROM company
GROUP BY country_code,
EXTRACT(YEAR FROM founded_at)
HAVING EXTRACT(YEAR FROM founded_at) = 2013)
SELECT total_11.country_code,
total_11.total_2011,
total_12.total_2012,
total_13.total_2013
FROM total_11
INNER JOIN total_12 ON total_11.country_code = total_12.country_code
INNER JOIN total_13 ON total_11.country_code = total_13.country_code
ORDER BY total_11.total_2011 DESC;