1

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;
4

2 に答える 2

3

集計関数を試してみてbool_orください。探しているものとまったく同じように聞こえます。

SELECT customer_name,
       bool_or(optout)    As optout,
       bool_or(blacklist) 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;
于 2011-04-18T08:44:02.380 に答える
0

質問を正しく理解していれば、SELECTにCASEステートメントが必要なだけだと思います。

CASE
WHEN blackLIST = TRUE OR optout = TRUE THEN 1
ELSE 0
END
于 2011-04-18T08:37:19.633 に答える