2016-12-11 2 views
0

고객, 상점, 구매, 제품 등에 대한 정보가있는 데이터베이스가 있습니다. 각 도시에 거주하는 고객의 수에 관심이 있습니다. 지금은 고객이 살고있는 도시에만 관심이 아니에요SQL 두 테이블에서 계산

| City   | # | 
+---------------+---+ 
| Amsterdam  | 4 | 
| New York City | 2 | 
| London  | 1 | 

:

SELECT city, count(cID) FROM customer GROUP BY city 

이 다음 표를 제공합니다 : 나는이에 의해 발견. 또한 상점이 있고 고객이없는 테이블이있는 도시를 갖고 싶습니다. 이와 같이 :

| City   | # | 
+---------------+---+ 
| Amsterdam  | 4 | 
| New York City | 2 | 
| London  | 1 | 
| Los Angeles | 0 | 

간단히 말해, customers 테이블, store 테이블 또는 둘 다에서 발생하는 각 도시에 거주하는 고객을 계산하고 싶습니다.

는 다음과 같다 : 이 고객 ( 는 CID, CNAME, 거리, 도시) 및 저장 ( 다음 sID, SNAME, 거리, 도시)

사람은 방법을 알고 있나요 이 작업을 수행?

+1

에서 원하는 u는 다음 결과를 둘 것이다 곳이라고 할 수있는 당신이 '도시'라는 모든 테이블을해야합니까? 그렇지 않다면 도시 이름을 어디에서 얻고 있습니까? –

답변

1
SELECT c.city, 
     COUNT(DISTINCT c.cID) AS [#] 
FROM customer c 
GROUP BY c.city 

UNION 

SELECT s.city, 
     0 AS [#] 
FROM store s 
LEFT JOIN customer c ON s.city = c.city 
WHERE c.cID IS NULL 
0

상점 테이블과 고객 테이블간에 LEFT JOIN을 수행하여 고객이없는 도시도 얻을 수 있습니다! @Akhter Alamin 인 Farhan은 주석으로 또한

SELECT s.city, count(*) 
FROM store s 
LEFT JOIN customer c ON s.city = c.city 
GROUP BY s.city 

, 당신은 cities 테이블을 가지고 있지 않은거야? 따라서 도시 이름을 반복해서 저장하는 대신 한 번 저장하고 storeid 및 customer 테이블에서 cityid를 사용하십시오.

+0

이것은 내가 원하는 결과를 생성하지 않습니다. 예를 들어 고객이 살지 않는 도시의 경우 2를 계산하지만 2 개의 상점이있는 경우 –

+0

count (*)를 count (DISTINCT c.cID)로 대체했습니다. 이것은 원하는 결과와 비슷해 보입니다. 고객이 사는 도시이지만 존재하지 않는 곳은 제외됩니다. –

0

당신은 UNION 모든

SELECT someColumn,someColumn,NULL 
FROM someTable 

UNION ALL 

SELECT NULL, NULL, someColumn 
FROM nextTable/orSameTable 

널은 유 다른 쿼리

관련 문제