2014-04-02 1 views
0

Northwind 예제 데이터베이스에서 Orders Table을 사용하고 있습니다. 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

Orders 테이블 대신 Customers 테이블에서 선택하십시오. 이 테이블에는 고객 당 한 행이 있으므로 더 쉽게 계산할 수 있습니다. 원하는 조건은 고객이 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 
)