У меня есть этот запрос ниже, и у меня возникли проблемы с использованием 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
Выход нормально, просто хочу, чтобы удалить дублируется purok
который имеет 0
значения в total,male,female
.
отмеченных красным цветом на изображении выше, должны быть удалены.
Union делает строки, а не отдельные ключи, уникальными. В вашем случае у вас есть две разные строки - '01, 2, 2, 0' и' 01, 0, 0, 0', поэтому 'UNION' сохраняет их оба. – dasblinkenlight
Итак, ПРИСОЕДИНЯЙТЕСЬ? –
'JOIN' может работать, но утверждение' CASE', которое вам нужно будет сделать, будет затруднено. Вы могли бы, вероятно, «UNION ALL» на уровне таблицы, обернуть это в большой запрос GROUP BY на 'purok'. – dasblinkenlight