-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathExercise_Three.sql
More file actions
164 lines (135 loc) · 4.11 KB
/
Exercise_Three.sql
File metadata and controls
164 lines (135 loc) · 4.11 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
-- Problem 1
SELECT VendorId SUM(PaymentTotal) AS PaymentSum
FROM Invoices
GROUP By VendorID;
-- Problem 2
SELECT TOP 10 VendorName, SUM(PaymentTotal) as PaymentSym
FROM Vendors
JOIN Invoices
ON Vendors.VendorID = Invoices.VendorID
GROUP BY VendorName
ORDER BY PaymentSum DESC;
-- Problem 3
SELECT VenderName, COUNT(8) as InvoiceCount,
SUM(InvoiceTotal) AS InvoiceSum
FROM Vendors
JOIN Invoices
ON Vendors.VendorID = Invoices.VendorID
GROUP BY VendorName
ORDER BY InvoiceCount DESC;
-- Problem 4
SELECT VendorName, COUNT(*) AS InvoiceCount,
SUM(InvoiceTotal) AS InvoiceSum
FROM Vendors
JOIN Invoices
ON Vendors.VendorID = Invoices.VendorID
GROUP BY VendorName
ORDER BY InvoiceCount DESC;
-- Problem 5
SELECT GLAccounts.AccountDescription, COUNT(*) as LineItemCount,
SUM(InvoiceLineItemAmount) AS LineItemSum
FROM GLAccounts
JOIN InvoiceLineItems
ON GLAccounts.Accountno = InvoiceLineItems.AccountNo
JOIN Invoices
ON InvoiceLineItems.InvoiceID = Invoices.InvoiceID
WHERE InvoiceDate BETWEEN '2019-10-01' AND '2019-12-31'
GROUP BY GLAcocunts.AccountDescription
HAVING COUNT(*) > 1
ORDER BY LineItemCount DESC;
-- Problem 6
SELECT AccoubtNo, SUM(InvoiceLineItemAmount) AS LineItemSum
FROM InvoiceLineItems
GROUP BY ROLLUP(AccountNo);
-- Problem 7
SELECT VendorName, AccountDescription, COUNT(8) AS LineItemCount,
SUM(InvoiceLineItemAmount) AS LineItemSum
FROM Vendors
JOIN Invoices
ON Vendors.VendorID = Invoices.VendorID
JOIN InvoiceLineItems
ON Invoices.InvoiceID = InvoiceLineItems.InvoiceID
JOIN GLAccounts
ON InvoiceLineItems.AccountNo = GLAccounts.AccountNo
GROUP BY VendorName, AccountDescription
ORDER BY VendorName, AccountDescription;
-- Problem 8
SELECT VendorName,
COUNT(DISTINCT InvoiceLineItems.AccountNo) AS 'Number of Accounts'
FROM Vendors
JOIN Invoices
ON Vendors.VendorID = Invoices.VendorID
JOIN InvoiceLineItems
ON Invoices.InvoicesID = InvoiceLineItems.InvoicesID
GROUP BY VendorName
HAVING COUNT(DISTINCT InvoicesLineItems.AccountNo) > 1
ORDER BY VendorName;
-- Problem 9
SELECT VendorID, InvoiceDate, InvoiceTotal,
SUM(InvoiceTotal) OVER (PARTITION BY VendorID) AS VendorTotal,
COUNT(InvoiceTotal) OVER(PARTITION BY VendorID) AS VendorCount,
AVG(InvoiceTotal) OVER(PARTITION BY VendorID) AS VendorAvg
FROM Invoices;
-- Problem 10
SELECT COUNT(OrderID) AS 'Number of Orders',
SUM(TaxAmount) AS 'Total TaxAmount'
FROM Orders
-- Problem 11
SELECT CategoryName,
COUNT(ProductName) AS 'Number of Products',
MAX(ListPrice) AS 'Max Price'
FROM Categories
JOIN Products
ON Categories.CategoryID = Products.CategoryID
GROUP BY CategoryName
ORDER BY 'Number of Products' DESC
-- Problem 12
SELECT EmailAddress,
SUM(ItemPrice * Quantity) AS 'Total Cost',
SUM(DiscountAmount*Quantity) AS 'Total Discount'
FROM Orders
JOIN OrderItems
ON Orders.OrderID = OrderItems.OrderID
JOIN Customers
ON Orders.CustomerID = Customers.CustomerID
GROUP BY EmailAddress
ORDER BY 'Total Cost' DESC;
-- Problem 13
SELECT EmailAddress, COUNT(Orders.OrderID) AS OrderCount,
SUM((ItemPrice - DiscountAmount) * Quantity) AS 'Total Amount'
FROM Orders
JOIN OrderItems
ON Orders.OrderID = OrderItems.OrderID
JOIN Customers
ON Orders.CustomerID = Customers.CustomerID
GROUP BY EmailAddress
HAVING COUNT(Orders.OrderID) > 1
ORDER BY 'Total Amount' DESC;
-- Problem 14
SELECT EmailAddress, COUNT(Orders.OrderID) AS OrderCount,
SUM((ItemPrice - DiscountAmount) * Quantity) AS 'Total Amount'
FROM Orders
JOIN OrderItems
ON Orders.OrderID = OrderItems.OrderID
JOIN Customers
ON Orders.CustomerID = Customers.CustomerID
WHERE ItemPRice > 400
GROUP BY EmailAddress
HAVING COUNT(Orders.OrderID) > 1
ORDER BY 'Total Amount' DESC;
-- Problem 15
SELECT ProductName,
SUM((ItemPrice-DiscountAmount)*Quantity) AS TotalAmount
FROM Products
JOIN OrderItems
ON OrderItems.ProductID = Products.ProductID
GROUP BY ROLLUP (ProductName);
-- Problem 16
SELECT EmailAddress, SUM(Quantity) AS TotalItems
FROM Orders
JOIN Customers
ON Orders.CustomerID = Customers.CustomerID
JOIN OrderItems
ON Orders.OrderID = OrderItems.OrderID
GROUP BY EmailAddress
HAVING SUM(Quantity) > 1;