HI には 3 つの製品テーブルがあり、それぞれに顧客名、ブール値のオプトアウト、ブラックリストの 3 つの列があります。having 句の後には、顧客名ごとに 3 つの行があります (顧客が 3 つの製品をすべて持っていると仮定します)。
ブール列のいずれかに true が含まれている場合、true を出力するにはどうすればよいですか。以下のキャスト操作を使用して理解しましたが、もっとエレガントな解決策があるはずです。
SELECT customer_name,
cast(int4(sum(cast(optout As int4))) As Boolean) As optout,
cast(int4(sum(cast(blacklist As int4))) As Boolean) As blacklist
FROM
(SELECT * FROM product1
UNION SELECT * FROM product2
UNION SELECT * FROM product3) AS temp1
GROUP BY customer_name, optout, blacklist
HAVING optout=true or blacklist=true;