-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathsqlQueries.sql
338 lines (299 loc) · 8.32 KB
/
sqlQueries.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
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
--1 non_usa_customers.sql: Provide a query showing Customers (just their full names, customer ID and country) who are not in the US.
SELECT
C.CustomerId,
(C.FirstName || " " || C.LastName) AS "FullName",
C.Country
FROM
Customer AS C
WHERE
C.Country IS NOT "USA";
--2 brazil_customers.sql: Provide a query only showing the Customers from Brazil.
SELECT
C.CustomerId,
(C.FirstName || " " || C.LastName) AS "FullName",
C.Country
FROM
Customer AS C
WHERE
C.Country IS "Brazil";
--3 brazil_customers_invoices.sql: Provide a query showing the Invoices of customers who are from Brazil. The resultant table should show the customer's full name, Invoice ID, Date of the invoice and billing country.
SELECT
I.InvoiceId,
(C.FirstName || " " || C.LastName) AS "FullName",
C.Country,
I.InvoiceDate,
I.BillingCountry
FROM
Customer AS C
JOIN Invoice AS I
WHERE
C.Country IS "Brazil";
--4 sales_agents.sql: Provide a query showing only the Employees who are Sales Agents.
SELECT
(E.FirstName || " " || E.LastName) AS "FullName"
FROM
Employee AS E
WHERE
E.Title IS "Sales Support Agent";
--5 unique_invoice_countries.sql: Provide a query showing a unique/distinct list of billing countries from the Invoice table.
SELECT DISTINCT
I.BillingCountry
FROM
Invoice AS I;
--6 sales_agent_invoices.sql: Provide a query that shows the invoices associated with each sales agent. The resultant table should include the Sales Agent's full name.
SELECT
(E.FirstName || " " || E.LastName) AS "Name",
*
FROM
Invoice AS I
JOIN Employee AS E
JOIN Customer AS C
WHERE
E.EmployeeId = C.SupportRepId
AND C.CustomerId = I.CustomerId
ORDER BY
NAME;
--7 invoice_totals.sql: Provide a query that shows the Invoice Total, Customer name, Country and Sale Agent name for all invoices and customers.
SELECT
(C.FirstName || " " || C.LastName) AS "Name",
I.Total,
C.Country,
(E.FirstName || " " || E.LastName) AS "Name"
FROM
Invoice AS I
JOIN Employee AS E
JOIN Customer AS C
WHERE
E.EmployeeId = C.SupportRepId
AND C.CustomerId = I.CustomerId
ORDER BY
NAME;
--8 total_invoices_{year}.sql: How many Invoices were there in 2009 and 2011?
SELECT
I.InvoiceDate,
COUNT(I.InvoiceDate)
FROM
Invoice AS I
WHERE
I.InvoiceDate BETWEEN '2009%'
AND '2011%';
--9 total_sales_{year}.sql: What are the respective total sales for each of those years?
SELECT
COUNT(InvoiceId) AS "num of invoices",
sum(Total),
strftime ("%Y",
InvoiceDate) AS yearVal
FROM
Invoice
WHERE
yearVal = "2009"
AND yearVal = "2011"
GROUP BY
yearVal;
SELECT strftime('%Y',i.InvoiceDate) as "Year", SUM(i.Total) AS "YearTotal"
FROM Invoice i
WHERE YEAR = "2009" or YEAR = "2011"
GROUP BY YEAR;
--10 invoice_37_line_item_count.sql: Looking at the InvoiceLine table, provide a query that COUNTs the number of line items for Invoice ID 37.
SELECT
COUNT(InvoiceId) AS "total items sold"
FROM
InvoiceLine
WHERE
InvoiceId = 37;
--11 line_items_per_invoice.sql: Looking at the InvoiceLine table, provide a query that COUNTs the number of line items for each Invoice. HINT: GROUP BY
SELECT
COUNT(InvoiceId) AS "total line items"
FROM
InvoiceLine
GROUP BY
InvoiceId;
--12 line_item_track.sql: Provide a query that includes the purchased track name with each invoice line item.
SELECT
I.InvoiceId, T.Name
FROM
InvoiceLine as I
Join Track as T
WHERE I.TrackId = T.TrackId
Order By InvoiceLineId;
--13 line_item_track_artist.sql: Provide a query that includes the purchased track name AND artist name with each invoice line item.
SELECT
I.InvoiceId, T.Name, A.Name
FROM
InvoiceLine as I
Join Track as T ON I.TrackId = T.TrackId
join Album as Al ON Al.AlbumId = T.AlbumId
Join Artist as A ON A.ArtistId = Al.ArtistId;
--14 country_invoices.sql: Provide a query that shows the # of invoices per country. HINT: GROUP BY
SELECT
BillingCountry,
COUNT(InvoiceId)
FROM Invoice
GROUP BY
BillingCountry;
--15 playlists_track_count.sql: Provide a query that shows the total number of tracks in each playlist. The Playlist name should be include on the resulant table.
SELECT
P.Name, COUNT(T.Name)
FROM
Playlist as P
JOIN PlaylistTrack as Pl ON P.PlaylistId = Pl.PlaylistId
JOIN Track as T ON Pl.TrackId = T.TrackId
Order by
P.NAME;
--16 tracks_no_id.sql: Provide a query that shows all the Tracks, but displays no IDs. The result should include the Album name, Media type and Genre.
SELECT
T.Name as "Track", A.Title "Album", M.Name "Media Type", G.Name "Genre"
FROM
Track as T
JOIN Album as A on A.AlbumId = T.AlbumId
JOIN MediaType as M on M.MediaTypeId = T.MediaTypeId
JOIN Genre as G on G.GenreId = T.GenreId
GROUP BY
T.Name;
--17 invoices_line_item_count.sql: Provide a query that shows all Invoices but includes the # of invoice line items.
SELECT
*, SUM(Quantity) AS "Total Sold"
FROM
Invoice as I
Join InvoiceLine as Il on I.InvoiceId = Il.InvoiceId
Group BY
I.InvoiceId;
--18 sales_agent_total_sales.sql: Provide a query that shows total sales made by each sales agent.
SELECT
E.FirstName, COUNT(I.CustomerId)
FROM
Employee as E
Join Invoice as I on C.CustomerId = I.CustomerId
JOIN Customer as C on C.SupportRepId = E.EmployeeId
GROUP By
E.FirstName;
-- 19. top_2009_agent.sql: Which sales agent made the most in sales in 2009?
--Hint: Use the MAX function on a subquery.
SELECT
EmployeeName,
InvoiceTotal,
MAX(TotalSales) TotalSales
FROM (
SELECT
e.FirstName || ' ' || e.LastName AS EmployeeName,
COUNT(*) InvoiceTotal,
sum(i.Total) TotalSales
FROM
Invoice i
JOIN Customer c ON i.CustomerId = c.CustomerId
JOIN Employee e ON c.SupportRepId = e.EmployeeId
WHERE
SUBSTR(i.InvoiceDate, 1, 4) = '2009'
GROUP BY
EmployeeName);
-- 20. top_agent.sql: Which sales agent made the most in sales over all?
SELECT
EmployeeName,
TotalSales,
MAX(InvoiceTotal) TotalSales
FROM (
SELECT
e.FirstName || ' ' || e.LastName AS EmployeeName,
COUNT(*) TotalSales,
sum(i.Total) InvoiceTotal
FROM
Invoice i
JOIN Customer c ON i.CustomerId = c.CustomerId
JOIN Employee e ON c.SupportRepId = e.EmployeeId
GROUP BY
EmployeeName);
-- 21. sales_agent_customer_count.sql: Provide a query that shows the count of customers assigned to each sales agent.
SELECT
e.FirstName || ' ' || e.LastName AS EmployeeName,
Count(*) NumberOfCustomers
FROM
Customer c
JOIN Employee e ON e.EmployeeId = c.SupportRepId
GROUP BY
EmployeeName;
-- 22. sales_per_country.sql: Provide a query that shows the total sales per country.
SELECT
i.BillingCountry Country,
COUNT(*) TotalSales,
sum(i.Total) InvoiceTotal
FROM
Invoice i
GROUP BY
Country;
-- 23. Which country's customers spent the most?
SELECT
Country,
MAX(InvoiceTotal) InvoiceTotal
FROM (
SELECT
i.BillingCountry Country,
COUNT(*) TotalSales,
sum(i.Total) InvoiceTotal
FROM
Invoice i
GROUP BY
Country);
-- 24. Provide a query that shows the most purchased track of 2013.
SELECT
Track,
MAX(TotalPurchased) TotalPurchased
FROM (
SELECT
t.Name Track,
COUNT(*) TotalPurchased
FROM
InvoiceLine il
JOIN Track t ON t.TrackId = il.TrackId
JOIN Invoice i
WHERE
i.InvoiceId IN(
SELECT
i.InvoiceId FROM Invoice i
WHERE
SUBSTR(i.InvoiceDate, 1, 4) = '2013')
GROUP BY
Track);
-- 25. Provide a query that shows the top 5 most purchased tracks over all.
SELECT
Track,
TotalPurchased
FROM ( SELECT DISTINCT
t.Name Track,
COUNT(il.TrackId) TotalPurchased
FROM
InvoiceLine il
JOIN Track t ON t.TrackId = il.TrackId
GROUP BY
il.TrackId)
ORDER BY
TotalPurchased DESC
LIMIT 5;
-- 26. Provide a query that shows the top 3 best selling artists.
SELECT
*
FROM ( SELECT DISTINCT
a.Name Artist,
COUNT(a.ArtistId) TracksSold
FROM
InvoiceLine il
JOIN Track t ON t.TrackId = il.TrackId
JOIN Album al ON al.AlbumId = t.AlbumId
JOIN Artist a ON a.ArtistId = al.ArtistId
GROUP BY
a.ArtistId)
ORDER BY
TracksSold DESC
LIMIT 3;
-- 27. Provide a query that shows the most purchased Media Type.
SELECT
MediaType,
MAX(TypeSold) TypeSold
FROM ( SELECT DISTINCT
mt.Name MediaType,
COUNT(mt.MediaTypeId) TypeSold
FROM
InvoiceLine il
JOIN Track t ON t.TrackId = il.TrackId
JOIN MediaType mt ON mt.MediaTypeId = t.MediaTypeId
GROUP BY
mt.MediaTypeId);