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.Productproductid|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:
-- 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.
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
- Weekly Trends and Language Statistics
- Weekly Trends and Language Statistics