SQL Exercises: View to keep track the number of customers ordering
5. From the following table, create a view to count the number of unique customers, compute the average and the total purchase amount of customer orders by each date.
Sample table: orders
ord_no purch_amt ord_date customer_id salesman_id ---------- ---------- ---------- ----------- ----------- 70001 150.5 2012-10-05 3005 5002 70009 270.65 2012-09-10 3001 5005 70002 65.26 2012-10-05 3002 5001 70004 110.5 2012-08-17 3009 5003 70007 948.5 2012-09-10 3005 5002 70005 2400.6 2012-07-27 3007 5001 70008 5760 2012-09-10 3002 5001 70010 1983.43 2012-10-10 3004 5006 70003 2480.4 2012-10-10 3009 5003 70012 250.45 2012-06-27 3008 5002 70011 75.29 2012-08-17 3003 5007 70013 3045.6 2012-04-25 3002 5001
Sample table: Customer
customer_id | cust_name | city | grade | salesman_id
-------------+----------------+------------+-------+-------------
3002 | Nick Rimando | New York | 100 | 5001
3007 | Brad Davis | New York | 200 | 5001
3005 | Graham Zusi | California | 200 | 5002
3008 | Julian Green | London | 300 | 5002
3004 | Fabian Johnson | Paris | 300 | 5006
3009 | Geoff Cameron | Berlin | 100 | 5003
3003 | Jozy Altidor | Moscow | 200 | 5007
3001 | Brad Guzan | London | | 5005
Sample Solution:
-- Creating a VIEW named 'totalforday'
CREATE VIEW totalforday
-- Selecting columns 'ord_date', count of distinct 'customer_id', average 'purch_amt', and total 'purch_amt' from the 'orders' table
-- Grouping the result by the 'ord_date' column
AS SELECT ord_date, COUNT(DISTINCT customer_id), AVG(purch_amt), SUM(purch_amt)
FROM orders
GROUP BY ord_date;
output:
sqlpractice=# SELECT * sqlpractice-# FROM totalforday; ord_date | count | avg | sum ------------+-------+-----------------------+--------- 2012-04-25 | 1 | 3045.6000000000000000 | 3045.60 2012-06-27 | 1 | 250.4500000000000000 | 250.45 2012-07-27 | 1 | 2400.6000000000000000 | 2400.60 2012-08-17 | 3 | 95.2633333333333333 | 285.79 2012-09-10 | 3 | 2326.3833333333333333 | 6979.15 2012-09-22 | 1 | 322.0000000000000000 | 322.00 2012-10-05 | 2 | 132.6300000000000000 | 265.26 2012-10-10 | 2 | 2231.9150000000000000 | 4463.83 (8 rows)
Code Explanation:
The SQL statement creates a view called "totalforday" that shows the order date, the total number of distinct customers who made orders on that date, the average purchase amount for orders made on that date, and sums the total purchase amount for orders made on that date.
The results are grouped by order date.
Go to:
PREV : View to count many customers at each lavel of grade.
NEXT : View to show for each order the salesman and customer.
Inventory database model:
Contribute your code and comments through Disqus.
What is the difficulty level of this exercise?
Test your Programming skills with w3resource's quiz.
