w3resource

AdventureWorks Database: Models with a maximum list price more than twice the average

SQL Query - AdventureWorks: Exercise-198 with Solution

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 --

Click to view Full table

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.



Follow us on Facebook and Twitter for latest update.