SQL Exercises: Customer order amounts that are on or above average
13. From the following tables write a SQL query to find those orders that are equal or higher than the average amount of the orders. Return ord_no, purch_amt, ord_date, customer_id and salesman_id.
Sample table: Ordersord_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 Solution:
-- Selecting all columns from the 'orders' table (aliased as 'a')
SELECT *
-- Specifying the table to retrieve data from ('orders' as 'a')
FROM orders a
-- Filtering the results based on the condition that 'purch_amt' is greater than or equal to the average 'purch_amt' for the same 'customer_id'
WHERE purch_amt >=
-- Subquery: Calculating the average 'purch_amt' from the 'orders' table (aliased as 'b') for the same 'customer_id'
(SELECT AVG(purch_amt) FROM orders b
WHERE b.customer_id = a.customer_id);
Output of the Query:
ord_no purch_amt ord_date customer_id salesman_id 70009 270.65 2012-09-10 3001 5005 70005 2400.60 2012-07-27 3007 5001 70008 5760.00 2012-09-10 3002 5001 70010 1983.43 2012-10-10 3004 5006 70003 2480.40 2012-10-10 3009 5003 70011 75.29 2012-08-17 3003 5007 70013 3045.60 2012-04-25 3002 5001 70007 948.50 2012-09-10 3005 5002 70012 250.45 2012-06-27 3008 5002
Explanation:
The said SQL query that selects all columns from the 'orders' table (aliased as 'a') where the "purch_amt" column is greater than or equal to the average "purch_amt" value for the corresponding "customer_id" in the same 'orders' table (aliased as 'b'). In other words, it's retrieving all the rows from 'orders' table where the "purch_amt" is greater than or equal to the average purchase amount made by the customer.
Visual Explanation:
Practice Online
Sample Database: inventory
Query Visualization:
Duration:
Rows:
Cost:
Contribute your code and comments through Disqus.
Previous SQL Exercise: Find all orders with above-average amounts.
Next SQL Exercise: Sums of all order amounts, grouped by date.
What is the difficulty level of this exercise?
Test your Programming skills with w3resource's quiz.
- Weekly Trends and Language Statistics
- Weekly Trends and Language Statistics