2017-12-16 23 views
0

그래, 합법적 인 오류나 아무것도 얻지는 못했지만 상태를 두 개의 개별 테이블에 나열한 횟수를 계산할 수 있도록 가져 오려고합니다. 원하는 모든 상태가 표시되지만 일부 상태에서는 여러 값이 있어야하지만 각 COUNT 값은 1 값이됩니다.이 문제를 해결할 수 있습니까?모든 값을 계산하지 않는 UNIONED 테이블

SELECT shipping_address_state, 
    COUNT(shipping_address_state) OVER (PARTITION BY shopper_account_id) 
FROM orders 
WHERE shipping_address_country IN ('USA', 'Canada', 'Mexico') 
UNION 
SELECT vendor_state, 
    COUNT(vendor_state) OVER (PARTITION BY vendor_id) 
FROM vendor 
WHERE vendor_country IN ('USA', 'Canada', 'Mexico') 

편집은 그래서 몇 가지 조언을했다, 나는 UNION ALL로 변경되었습니다. 또한 SELECT vendor_state 및 shipping_address_state 부분에 DISTINCT를 추가했습니다. 이제는 주 이름 열의 모든 반복이 제거되었지만 카운트는 여전히 1입니다. DISTINCT 키워드가 없으면 반복 된 상태가 표시되지만 별도의 데이터 행 (펜실베니아처럼 3 회 표시되지만 각각 1의 수를 가짐). 이것은 지금처럼 생겼습니다. COUNT이 (가) 꺼진 이유를 아는 사람이 있습니까?

SELECT DISTINCT vendor_state "State", 
    COUNT(vendor_state) OVER (PARTITION BY vendor_id) "Count" 
FROM vendor 
WHERE vendor_country IN ('USA', 'Canada', 'Mexico') 
UNION ALL 
SELECT DISTINCT shipping_address_state "State", 
    COUNT(shipping_address_state) OVER (PARTITION BY shopper_account_id) "Count" 
FROM orders 
WHERE shipping_address_country IN ('USA', 'Canada', 'Mexico') 

편집은 흥미롭게도, 나는 COUNT 문제의 큰 부분을 해결했다. 방금 PARTITION BY 절을 변경하여 PARTITION BY 절을 계산했습니다. 이제 그들은 제대로 계산되고 있지만 두 테이블 모두에 있기 때문에 State 컬럼에는 여전히 값이 반복됩니다. 각 열은 해당 테이블에 이 나타나는 횟수를 계산합니다.. UNION ALL 대신 UNION으로 다시 변경하려고했지만 아무 것도 변경하지 않았습니다. 이것이 할 수 있는지 보자! UNION ALL

UNION에 대한 UNION 밖으로

SELECT DISTINCT vendor_state "State", 
    COUNT(vendor_state) OVER (PARTITION BY vendor_state) "Count" 
FROM vendor 
WHERE vendor_country IN ('USA', 'Canada', 'Mexico') 
UNION ALL 
SELECT DISTINCT shipping_address_state "State", 
    COUNT(shipping_address_state) OVER (PARTITION BY shipping_address_state) "Count" 
FROM orders 
WHERE shipping_address_country IN ('USA', 'Canada', 'Mexico') 
ORDER BY "State" 
+0

일부 샘플 테이블 데이터와 예상 출력 위대한 도움이 될 것입니다 – Wanderer

+0

당신의 파괴를 되돌릴 수 있습니다. 내 게시물을 파손하지 마십시오. –

답변

1

변경 결과 집합에서 중복 행을 제거합니다. 그러나 UNION ALL은 결과 집합을 그대로 표시합니다. 보다 UNION ALL를 사용하는 동안

그래서 당신은 더 나은 성능을 기대할 수 있습니다 UNION

0
,이 같은 카운트 컬럼의 이름을 설정 당신은 UNION에 UNION을 변경해야합니다

:

SELECT shipping_address_state, 
    COUNT(shipping_address_state) OVER (PARTITION BY shopper_account_id) cnt 
FROM orders 
WHERE shipping_address_country IN ('USA', 'Canada', 'Mexico') 
UNION ALL 
SELECT vendor_state, 
    COUNT(vendor_state) OVER (PARTITION BY vendor_id) cnt 
FROM vendor 
WHERE vendor_country IN ('USA', 'Canada', 'Mexico')