我一直试图找出如何在sql中编写这个查询。
我需要的是找到有50个或更多订单的产品名(在产品表中)(在订单表中)。
一次只有一个orderid与一个productname匹配,因此当我尝试计算orderid时,它会统计所有这些。
我可以获得不同的产品名称,但是一旦我添加了orderid,它就会回到拥有多个产品名称。
我还需要计算订购这些产品的客户数量(在订单表中)。
我尽快得到一些认真的帮助!如果有人能帮助我弄清楚如何解决这个问题会很棒!
Table: Products
`productname` in the form of a text like 'GrannySmith'
Table: Orders
`orderid` in the form of '10222'..etc
`custid` in the form of something like 'SMITH'
答案 0 :(得分:7)
假设订单表有一个与名为ProductId的产品表相关的字段。 SQL将转换为:
SELECT p.ProductName, Count(*)
FROM Orders o
JOIN Products p
on o.ProductId = p.ProductId
GROUP BY p.ProductName HAVING COUNT(*) >= 50
密钥位于Group By子句的having
组件中。我希望这会有所帮助。
答案 1 :(得分:2)
您可能缺少“订单明细”表 - 通常,订单包含多个订单详细信息,然后每个订单详细信息都会映射到产品 - 类似于Northwind中的示例:
在这种情况下,您的SQL查询将是这样的:将[Order Details]
表连接到[Orders]
和[Products]
表,按产品ID和名称分组,以及计数OrderID的:
select
p.ProductID, p.ProductName, count(o.OrderID)
from
[order details] od
inner join
orders o on od.OrderID = o.OrderID
inner join
products p ON od.productID = p.ProductID
group by
p.ProductID, p.ProductName
having
count(o.OrderID) > 50