2014-04-02 39 views
0

我在Northwind示例数据库中使用了订单表。它可以在这里找到:http://www.w3schools.com/sql/trysql.asp?filename=trysql_select_distinct如何使用聚合函数后计数

我想找到唯一的客户,只有使用shipperID 3的数量。(所以如果相同的客户使用shipperID 1或shipperID 2我不想将他添加到算)

我知道我可以做的这些独特的客户查询:

SELECT CustomerID , ShipperID FROM Orders GROUP BY CustomerID HAVING COUNT(DISTINCT ShipperID)=1 and shipperid = 3

但是我不知道如何真正得到不同CustomerIDs的总数。任何人都可以给我手?谢谢:)

回答

0
select count (distinct customerid) from (SELECT CustomerID , ShipperID 
FROM Orders 
GROUP BY CustomerID 
HAVING COUNT(DISTINCT ShipperID)=1 and shipperid = 3) as data ; 
0

从客户表而不是从订单表中选择。该表每个客户有一行,所以您可以更轻松地获得计数。您希望的条件是客户使用了ShipperID#3,并且客户没有使用任何ShipperID> 3。因此,有两个与Orders表相关的EXISTS条件。

SELECT COUNT(*) 
FROM Customers 
WHERE EXISTS (
    SELECT * 
    FROM Orders 
    WHERE Orders.CustomerID = Customers.CustomerID 
    AND Orders.ShipperID = 3 
) AND NOT EXISTS (
    SELECT * 
    FROM Orders 
    WHERE Orders.CustomerID = Customers.CustomerID 
    AND Orders.ShipperID <> 3 
)