Postgresql 如何只选择那些没有';t在任何产品中的状态=真
疑问是Postgresql 如何只选择那些没有';t在任何产品中的状态=真,postgresql,Postgresql,疑问是 select brand from products where status = false and brand not in ( select brand from products where status = true group by brand ) group by brand; 基本上,我只想选择那些在任何产品中都没有status=true的品牌 我想优化上面的查询您可以使用CASE语句将布尔值转换为位,然后使用MAX对其执行以下操作: SELECT br
select brand
from products
where status = false
and brand not in (
select brand
from products
where status = true
group by brand
)
group by brand;
基本上,我只想选择那些在任何产品中都没有status=true的品牌
我想优化上面的查询您可以使用
CASE
语句将布尔值转换为位,然后使用MAX
对其执行以下操作:
SELECT brand
FROM products
GROUP BY brand
HAVING MAX(CASE WHEN status = TRUE THEN 1 ELSE 0 END) = 1
您可以使用
CASE
语句将布尔值转换为位,然后在该语句上使用MAX
:
SELECT brand
FROM products
GROUP BY brand
HAVING MAX(CASE WHEN status = TRUE THEN 1 ELSE 0 END) = 1
使用布尔聚合函数:
使用布尔聚合函数:
+1.我正在寻找这个函数,以前没有使用过,但我想PostgreSQL会有它。有趣的是,您可以使用<代码>不布尔(或)代码> />代码> BooLoad和()/Cube >,结果相同,但OP可能想考虑列<代码>状态>代码>是否可空,并相应地调整。或者可以使用
bool\u和(非状态)
+1。我正在寻找这个函数,以前没有使用过,但我想PostgreSQL会有它。有趣的是,您可以使用<代码>不布尔(或)代码> />代码> BooLoad和()/Cube >,结果相同,但OP可能想考虑列<代码>状态>代码>是否可空,并相应地调整。或者可以使用bool\u和(非状态)
。