I am wondering if my answer works for this problem? The answer I was able to find on the internet seems similar but they join another table which seems ambiguous.
Question: A “Single Item Order” is a customer order where only one item is ordered. Show the SalesOrderID and the UnitPrice for every Single Item Order.
Their answer:
select sod.SalesOrderID, sod.UnitPrice from SalesLT.SalesOrderDetail sod inner join SalesLT.SalesOrderHeader soh on soh.SalesOrderID = sod.SalesOrderID where sod.SalesOrderID in ( select s.SalesOrderID as ordernums from SalesLT.SalesOrderDetail s group by s.SalesOrderID having COUNT(*) = 1 );
My Answer:
SELECT SalesOrderID, UnitPrice FROM SalesOrderDetail GROUP BY SalesOrderID HAVING COUNT(SalesOrderID) = 1;
Advertisement
Answer
If you run your answer, you’ll get an error because UnitPrice
is not in the GROUP BY
. If you add it, your HAVING
will not work.
The solution is simple . . . you need an aggregation function:
SELECT SalesOrderID, MAX(UnitPrice) as UnitPrice FROM SalesOrderDetail GROUP BY SalesOrderID HAVING COUNT(SalesOrderID) = 1;