w3resource

AdventureWorks Database: Return the name of the product that is the least expensive for value of ProductSubcategoryID is 37

SQL Query - AdventureWorks: Exercise-102 with Solution

102. From the following table write a query in SQL to return the name, list price, and the alias "LeastExpensive" for the product(s) that have the lowest list price within a given product subcategory (ProductSubcategoryID = 37). Ensure the query filters the results to this specific subcategory and correctly identifies the least expensive product(s).

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:


-- Select the product name, list price, and name of the least expensive product from the Production.Product table
SELECT
    p.name,                       -- Selects the product name
    p.listprice,                  -- Selects the product list price
    p.name AS LeastExpensive      -- Aliases the product name as LeastExpensive for the output
FROM
    Production.Product p          -- From the Production.Product table, aliased as p
JOIN
    (SELECT
        MIN(listprice) AS MinPrice   -- Selects the minimum list price from the Production.Product table
     FROM
        Production.Product
     WHERE
        ProductSubcategoryID = 37) AS sub   -- Filters for products with ProductSubcategoryID of 37 and aliases the subquery as sub
ON
    p.listprice = sub.MinPrice     -- Joins the main query with the subquery on the list price being equal to the minimum list price
WHERE
    p.ProductSubcategoryID = 37;   -- Filters for products with ProductSubcategoryID of 37

Explanation:

This SQL query is designed to find the least expensive product within a specific subcategory (with ProductSubcategoryID = 37) in the Production.Product table.

  • Inner Subquery:
    • The subquery selects the minimum list price (MIN(listprice)) from the Production.Product table where the ProductSubcategoryID is 37. This subquery is aliased as sub.
    • The result of this subquery will be a single value: the minimum list price of products in the specified subcategory.
  • Main Query:
    • The main query selects the product name (p.name), list price (p.listprice), and aliases the product name as LeastExpensive from the Production.Product table, which is aliased as p.
    • It performs a join with the result of the subquery (sub) on the condition that the product's list price (p.listprice) matches the minimum list price (sub.MinPrice) found in the subquery.
    • The WHERE clause filters the products to only those with a ProductSubcategoryID of 37.
  • Result:
    • The query returns the name, list price, and name (as LeastExpensive) of the least expensive product(s) within the specified subcategory (with ProductSubcategoryID = 37).
    • If there are multiple products with the same minimum list price, all such products will be included in the result set.

Sample Output:

name               |listprice|leastexpensive     |
-------------------+---------+-------------------+
Patch Kit/8 Patches|     2.29|Patch Kit/8 Patches|

SQL AdventureWorks Editor:

Practice Online


Contribute your code and comments through Disqus.

Previous: Calculate salary percentile for each employee for specific department.
Next: Return the employee with the fewest number of vacation hours.


What is the difficulty level of this exercise?

Test your Programming skills with w3resource's quiz.



Become a Patron!

Follow us on Facebook and Twitter for latest update.

It will be nice if you may share this link in any developer community or anywhere else, from where other developers may find this content. Thanks.

https://www.w3resource.com/sql-exercises/adventureworks/sql-adventureworks-exercise-102.php