-
Notifications
You must be signed in to change notification settings - Fork 18
/
8_GroupingAndCase_Homework.sql
214 lines (100 loc) · 4.5 KB
/
8_GroupingAndCase_Homework.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
/******************************************************************************
Course videos: https://www.red-gate.com/hub/university/courses/t-sql/tsql-for-beginners
Course scripts: https://litknd.github.io/TSQLBeginners
GROUPING data (with a side of CASE)
HOMEWORK FILE
Documentation:
https://docs.microsoft.com/en-us/sql/t-sql/queries/select-group-by-transact-sql
https://docs.microsoft.com/en-us/sql/t-sql/queries/select-having-transact-sql
https://docs.microsoft.com/en-us/sql/t-sql/language-elements/case-transact-sql
For best results, work through this homework and test running the queries (learn by "doing" when you can)
Need some help?
Join the SQL Community Slack group for discussion: https://t.co/w5LWUuDrqG
Click the + next to 'Channels' and join #tsqlbeginners
*****************************************************************************/
/* Doorstop */
RAISERROR(N'Did you mean to run the whole thing?',20,1) WITH LOG;
GO
USE WideWorldImporters;
GO
/*
Q1
Using the Sales.OrderLines table
Aggregate the average of the Quantity column for the entire table
SELECT one column:
AvgQuantity returned with datatype NUMERIC(10,1)
Your calculation should be precise to one decimal point
Your query should return one row
*/
/*
Q2
Using the Application.People table
SELECT the count of all phone numbers in the table AND the count of unique phone numbers in the table
SELECT these columns:
CountPhoneNumbers, the count of all the phone numbers (including duplicates), but NOT null phone numbers
CountDistinctPhoneNumbers, the count of unique phone numbers in the table
Your query should return one row
Tips:
Our examples didn't show the easiest way to do this, but you can find it in the documentation
https://docs.microsoft.com/en-us/sql/t-sql/functions/count-transact-sql
*/
/*
Q3
Using the Sales.Orders table and Sales.OrderLines tables (inner join on OrderID)
Aggregate the SUM and MAX for (UnitPrice * Quantity) for all orders for the Customer
Then select the TOP 5 customers based on the SUM of (UnitPrice * Quantity) for all their orders
SELECT these columns:
Column 1: CustomerID
Column 2: SUMOrderLines,
defined as the sum of (UnitPrice * Quantity) for every OrderLine for that customer
Column 3: MAXOrderLines,
defined as the maximum of (UnitPrice * Quantity) for every OrderLine for that customer
Order the results by SUMOrderLines DESC
SELECT only the TOP 5 rows
The query should return 5 rows
*/
/*
Q4
This builds on the previous question, so take your query and modify it (or start fresh if you prefer)
Using the Sales.Orders table and Sales.OrderLines tables (inner join on OrderID)
Add a join to Sales.Customers on CustomerID
Add a join to Sales.CustomerCategories on CustomerCategoryID
Group at more than one level: CustomerCategoryName, then CustomerName
SELECT these columns:
Column 1: CustomerCategoryName
Column 2: CustomerName
Column 3: SUMOrderLines,
defined as the sum of (UnitPrice * Quantity) for every OrderLine for that customer in that category
Column 4: MAXOrderLines,
defined as the maximum of (UnitPrice * Quantity) for every OrderLine for that customer in that category
Get rid of the TOP 5, and now only return rows where SUMOrderLines > 375000
Order the results by SUMOrderLines DESC
The query should return 3 rows
*/
/*
Q5
Using only the Application.People table
Return two columns:
FullName
SalespersonType, a column defined as:
When IsEmployee = 1 and IsSalesperson = 1, return "WWI Sales"
When IsEmployee = 0 and IsSalesperson = 1, return "Customer Sales"
When IsEmployee = 1 and IsSalesperson = 0, return "WWI Non-Sales"
Only return rows where IsSalesperson = 1 OR IsEmployee = 1
The query should return 19 rows
*/
/*
Q6
Using the Sales.Orders table and Sales.Customers table
(inner join on CustomerID)
Count the number of Orders which have a BackOrderID that is not null (and related calculations)
SELECT three columns:
Column 1: CustomerName
Column 2: [Number Backordered],
defined as the total number of rows in Sales.Orders for that customer where BackOrderID is not NULL
Column 3: [Number NOT Backordered],
defined as the total number of rows in Sales.Orders for that customer where BackOrderID is NULL
Order the results by the Number Backordered DESC
The query should return 663 rows
*/
/* 🌮🌮🌮🌮🌮 You're all done! Nice work! 🌮🌮🌮🌮🌮 */