使用DISTINCT函数的SQL聚合函数问题

时间:2014-11-08 17:54:04

标签: sql-server

我需要帮助解决一个问题,我现在已经绞尽脑汁待了两天(差不多),在这个任务上。我仍然是SQL新手,我只是苦苦挣扎。

我不想回答!我只是在寻求帮助,朝着正确的方向前进。

以下是问题:

写一个回答这个问题的SELECT语句:哪些客户订购了多个产品?返回这些列: 来自Customers表的电子邮件地址 来自客户订单的不同产品的数量

这是我到目前为止所做的:

SELECT Customers.CustomerID,
       Count(DISTINCT ProductID) AS ProductsCount
FROM   Customers
       INNER JOIN Orders
               ON Customers.CustomerID = Orders.CustomerID
       JOIN Products
         ON Products.ProductID = OrderItems.ProductID
GROUP  BY Customers.CustomerID,
          Orders.CustomerID 

但我一直收到这个错误:

    Msg 4104, Level 16, State 1, Line 2
    The multi-part identifier "OrderItems.ProductID" could not be bound.

这里有三个表的结构是。

Customer表有一个Emailaddress和CustomerID列。 Orders表具有CustomerID和OrderID列。 Products表具有ProductID列。 OrderItems表具有OrderID,ProductID和Quantity列。

任何帮助都会非常有用!

谢谢!

3 个答案:

答案 0 :(得分:1)

通过加入OrderItems表修复语法,并且为了多次查找内容,您需要使用group by field1,field2等具有count(field)>你快到了。

答案 1 :(得分:0)

以下是寻找答案的提示,

  1. 查找OrderItems中包含多个项目的订单 将having clauseCount() aggregateGroup by orderID一起使用的表格。

  2. 所以从第一步开始,您将获得超过的订单     每个订单中的一个项目和产品数量。接下来加入第一步结果     订购表以获取customerid。

  3. 接下来加入第二步结果与customers表获取     客户信息谁购买了多个单一产品     有计数的订单。

答案 2 :(得分:0)

你快到了: - )

  • 您忘了加入OrderItems。
  • 您不需要此查询中的表Products(您不希望从该表中看到任何内容;您从OrderItems获取产品计数)。
  • 要按聚合限制(按此处的产品数量),请使用HAVING。
  • 按Orders.CustomerID分组是多余的,因为它等于Customers.CustomerID。