如何使用SQL选择具有>的行另一个表中的50个相关行?

时间:2010-10-08 05:44:11

标签: sql

我一直试图找出如何在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'

2 个答案:

答案 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中的示例:

alt text

在这种情况下,您的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