【发布时间】:2018-07-29 05:39:23
【问题描述】:
我有一个名为“apple”的表,我编写了以下查询:
select name,
count(name),
case when istasty is null then false else istasty end
from apple
group by name, istasty;
这是输出:
我正在尝试使用以下条件对 name 和 istasty 标志进行分组:
- 当对应的名称列同时存在真假时,则返回假。在上图中,
tala具有true和falseistasty列。但是,我想返回 false,因为它至少有一个 falseistasty列。 - 如果在对特定名称列的所有
istasty列进行分组后是true,则返回true;同样,如果所有istasty列都是false,则为该特定名称列返回false。
我可以通过编写查询在postgresql 中使用bool_and 运算符来实现:
select name, count(name), bool_and(coalesce(istasty = true, false)) from apple group by name;
有什么方法可以修改我的第一个查询,以便在having clause 中添加过滤器,以达到与在第二个查询中使用bool_and 运算符相同的结果?或者还有其他可能的方法吗?
请注意我没有使用bool_and 运算符。我很感激你的时间。谢谢。
【问题讨论】:
-
不相关,但是:
coalesce(istasty = true, false)与coalesce(istasty, false)相同。
标签: postgresql boolean grouping logical-operators logical-and