1
아래 쿼리가 있는데 UNION을 사용하는 데 문제가 있습니다. purok
이 중복됩니다.UNION을 사용하는 중복 값
SELECT h.cpurok as purok,
COUNT(m.cgender) AS total,
SUM(CASE WHEN m.cgender::text = 'Male'::text THEN 1 ELSE 0 END) AS male,
SUM(CASE WHEN m.cgender::text = 'Female'::text THEN 1 ELSE 0 END) AS female
FROM tbl_member as m, tbl_household as h, tbl_barangay as b, tbl_answer as a
WHERE h.chholdnumber=m.chholdnumber
and h.cbrgycode=b.cbrgycode
and b.cbrgyname='AGAO'
and a.nqid=16
and a.nmemberid=m.nmemberid
and choice in ('29','30','31','32','35','36')
GROUP BY purok
UNION
SELECT h.cpurok as purok,
0 AS total, 0 AS male, 0 AS female
FROM tbl_household as h, tbl_answer as a
WHERE a.nqid=15
and choice='21'
order by purok
출력은 total,male,female
에서 0
값이 중복 purok
제거 할, 괜찮습니다.
다음은 화상에 빨간 위에서 제거되어야 표시했다.
유니언은 개별 키가 아닌 행을 고유하게 만듭니다. 귀하의 경우 두 개의 서로 다른 행 ('01, 2, 2, 0'과'01, 0, 0, 0')이 있으므로 'UNION'은 두 행을 모두 유지합니다. – dasblinkenlight
그래서, 대신 JOIN? –
'JOIN'은 작동 할 수 있지만 작동시키기 위해 필요한 CASE 문은 복잡해집니다. 아마도 테이블 수준에서'UNION ALL'을 사용하고,'purok'에 대한 큰'GROUP BY' 쿼리로 감쌀 수 있습니다. – dasblinkenlight