Adventureworks SQLzoo

时间:2018-10-09 06:26:52

标签: sql

“单个项目订单”是仅订购一个项目的客户订单。显示每个单项订单的SalesOrderID和单价

嗨, 我尝试了这个问题,下面是我的答案:

SELECT s.salesOrderID, s.UnitPrice
FROM SalesOrderDetail s
INNER JOIN Product p ON s.ProductID = p.ProductID
GROUP BY s.salesOrderID, s.unitPrice
HAVING count(s.OrderQty) = 1

。请让我知道这是否是最新的,否则请提供解决方案。寻找答案

谢谢

2 个答案:

答案 0 :(得分:0)

我建议:

SELECT MAX(s.salesOrderID) as salesOrderId, MAX(s.UnitPrice) as UnitPrice
FROM SalesOrderDetail s
GROUP BY s.OrderID
HAVING COUNT(*) = 1;

根据您的查询,UnitPrice位于SalesOrderDetail中而不是Product中,因此JOIN不是必需的。如果UnitPrice确实位于Product中,那么您需要JOIN

请注意查询的逻辑。您要按订单计数订单详细信息记录。因此,那应该是聚合。 HAVING子句可确保该订单只有一条明细记录。

因此,MAX()函数将返回该单行上的值。

答案 1 :(得分:0)

我认为这个问题的意思是客户订单正好一种订单数量为 1 的商品。JOIN 是不必要的,因为所有需要的数据都在一个表中。这是我的解决方案:

SELECT SalesOrderID, UnitPrice
FROM SalesOrderDetail
WHERE SalesOrderID IN
(SELECT SalesOrderID
    FROM SalesOrderDetail
GROUP BY SalesOrderID HAVING COUNT(ProductID) = 1) AND OrderQty = 1

这消除了单件数量多于一件的订单。

SQLZoo 没有这些答案的笑脸,所以我不确定我是否正确;)