2014-11-07 4 views
0

유니온을 사용하는 하나의 테이블에서 3 개의 SQL 쿼리를 결합하고 싶습니다. 다른 쿼리를 시도했지만 그 중 아무 것도 작동하지 않았습니다. 무엇이 누락 되었습니까?SQL에서 유니온 및 집계

SELECT DISTINCT 
     place.type AS type, 
     COUNT(place.type)AS place, 
     0 AS msd, 
     0 AS county 
FROM place 
GROUP BY place.type; 

SELECT DISTINCT 
     mcd.type, 
     0 AS place, 
     COUNT(mcd.type) AS msd, 
     0 AS county 
FROM mcd 
GROUP BY mcd.type; 

SELECT DISTINCT 
     county.type, 
     0 AS place, 
     0 AS msd, 
     COUNT(county.type) AS county 
FROM county 
GROUP BY county.type; 

그래서 최종 출력은 계획 유형은 3 개 테이블에서 유형에 대한 모든 다른 값을 포함하고 장소 장소 테이블에 유형의 값이 나타나는 횟수를 포함 (유형, 장소, MCD, 군) 것 mcs와 county도 마찬가지입니다.

+0

어떤 오류 메시지가 표시됩니까? – Gabe

+0

쿼리 사이에 'UNION'을 추가하면 어떤 점이 문제가됩니까? 그게 효과가 있다고 생각합니다. 그러나 'DISTINCT'는 필요하지 않습니다. – Andrew

답변

0

세 쿼리를 조합하여 type 값을 얻으려면 외부 쿼리가 필요합니다.

다음은 UNION ALL 집합 연산자를 사용하여 세 가지 쿼리의 결과를 결합하는 예제입니다. 해당 쿼리는 형식 열의 GROUP BY를 수행하는 외부 쿼리에서 참조하는 인라인보기이며 COUNT/0 열의 SUM 집계입니다. 각 쿼리의 GROUP BY 절을

SELECT t.type 
     , SUM(t.place) 
     , SUM(t.msd) 
     , SUM(t.county) 
    FROM (SELECT place.type AS type 
       , COUNT(place.type) AS place 
       , 0 AS msd 
       , 0 AS county 
      FROM place 
      GROUP BY place.type 
      UNION ALL 
      SELECT mcd.type 
       , 0 AS place 
       , COUNT(mcd.type) AS msd 
       , 0 AS county 
      FROM mcd 
      GROUP BY mcd.type 
      UNION ALL 
      SELECT county.type 
       , 0 AS place 
       , 0 AS msd 
       , COUNT(county.type) AS county 
      FROM county 
      GROUP BY county.type 
     ) t 
    GROUP BY t.type 

는 DISTINCT 키워드는 필요하지 않습니다.

+0

대단히 감사합니다! – Rayan

0

귀하의 요구 사항에 더 적합 3 조 테이블을 함께 보인다.

SELECT coalese(place.type,mcd.type,conty.type) AS type, 
     COUNT(place.type)AS place, 
     COUNT(mcd.type) AS msd, 
     COUNT(county.type) AS county 
FROM place 
FULL OUTER JOIN mcd ON place.type = mcd.type 
FULL OUTER JOIN county ON place.type = county.type 
GROUP BY coalese(place.type,mcd.type,conty.type) 
관련 문제