AdventureWorks Database: Models with a maximum list price more than twice the average
198. From the following table write a query in SQL to find product models where the maximum list price is more than twice the average.
Sample table: Production.Product
productid|name |productnumber|makeflag|finishedgoodsflag|color |safetystocklevel|reorderpoint|standardcost|listprice|size|sizeunitmeasurecode|weightunitmeasurecode|weight |daystomanufacture|productline|class|style|productsubcategoryid|productmodelid|sellstartdate |sellenddate |discontinueddate|rowguid |modifieddate | ---------+--------------------------------+-------------+--------+-----------------+------------+----------------+------------+------------+---------+----+-------------------+---------------------+-------+-----------------+-----------+-----+-----+--------------------+--------------+-----------------------+-----------------------+----------------+------------------------------------+-----------------------+ 1|Adjustable Race |AR-5381 |false |false | | 1000| 750| 0| 0| | | | | 0| | | | | |2008-04-30 00:00:00.000| | |694215b7-08f7-4c0d-acb1-d734ba44c0c8|2014-02-08 10:01:36.827| 2|Bearing Ball |BA-8327 |false |false | | 1000| 750| 0| 0| | | | | 0| | | | | |2008-04-30 00:00:00.000| | |58ae3c20-4f3a-4749-a7d4-d568806cc537|2014-02-08 10:01:36.827| 3|BB Ball Bearing |BE-2349 |true |false | | 800| 600| 0| 0| | | | | 1| | | | | |2008-04-30 00:00:00.000| | |9c21aed2-5bfa-4f18-bcb8-f11638dc2e4e|2014-02-08 10:01:36.827| 4|Headset Ball Bearings |BE-2908 |false |false | | 800| 600| 0| 0| | | | | 0| | | | | |2008-04-30 00:00:00.000| | |ecfed6cb-51ff-49b5-b06c-7d8ac834db8b|2014-02-08 10:01:36.827| 316|Blade |BL-2036 |true |false | | 800| 600| 0| 0| | | | | 1| | | | | |2008-04-30 00:00:00.000| | |e73e9750-603b-4131-89f5-3dd15ed5ff80|2014-02-08 10:01:36.827| 317|LL Crankarm |CA-5965 |false |false |Black | 500| 375| 0| 0| | | | | 0| |L | | | |2008-04-30 00:00:00.000| | |3c9d10b7-a6b2-4774-9963-c19dcee72fea|2014-02-08 10:01:36.827| 318|ML Crankarm |CA-6738 |false |false |Black | 500| 375| 0| 0| | | | | 0| |M | | | |2008-04-30 00:00:00.000| | |eabb9a92-fa07-4eab-8955-f0517b4a4ca7|2014-02-08 10:01:36.827| -- more --
Sample Solution:
-- Selecting ProductModelID from the Production.Product table and aliasing it as 'p1'
SELECT p1.ProductModelID
-- Grouping the result by ProductModelID
FROM Production.Product AS p1
GROUP BY p1.ProductModelID
-- Filtering the grouped results based on a condition
HAVING MAX(p1.ListPrice) <=
-- Subquery to calculate the average list price multiplied by 2
(SELECT AVG(p2.ListPrice) * 2
-- From the Production.Product table aliased as 'p2'
FROM Production.Product AS p2
-- Filtering records where the ProductModelID matches that of the outer query
WHERE p1.ProductModelID = p2.ProductModelID);
Explanation:
- This SQL query retrieves ProductModelID from the Product table based on a condition involving the maximum list price and the average list price multiplied by 2 for each product model.
- Comments are added to explain each part of the query for better understanding and maintenance.
- Here's a breakdown of what the query does:
- The SELECT clause specifies the ProductModelID column to be retrieved from the Product table, aliased as 'p1'.
- The GROUP BY clause groups the result set by ProductModelID.
- The HAVING clause filters the grouped results based on a condition involving the maximum list price (MAX(p1.ListPrice)) being less than or equal to the average list price multiplied by 2.
- The subquery calculates the average list price multiplied by 2 for each product model in the Product table, aliased as 'p2'.
- The WHERE clause in the subquery filters records where the ProductModelID matches that of the outer query.
Sample Output:
productmodelid| --------------+ 58| 8| 87| 116| 68| 51| 70| 80| 52| 84| 92| 101| 69| ...
SQL AdventureWorks Editor:
Practice Online
Contribute your code and comments through Disqus.
Previous: Retrieve the name of each employee whose bonus in the SalesPerson table is 5000.
Next: Find the names of employees who have sold a particular product.
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