AdventureWorks Database: Return the name of the product that is the least expensive for value of ProductSubcategoryID is 37
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.
- Weekly Trends and Language Statistics
- Weekly Trends and Language Statistics