Yog*_*ire 6 postgresql grouping boolean logical-operators logical-and
我有一个名为“apple”的表,我编写了以下查询:
select name,
count(name),
case when istasty is null then false else istasty end
from apple
group by name, istasty;
Run Code Online (Sandbox Code Playgroud)
这是输出:
我正在尝试使用以下条件对name和istasty标志进行分组:
tala具有true和false istasty列。但是,我想返回 false,因为它至少有一个 falseistasty列。istasty特定名称列的所有列进行分组true之后返回true;同样,如果所有istasty列都是false,则返回false该特定名称列。我可以通过编写查询来实现使用bool_and操作符postgresql:
select name, count(name), bool_and(coalesce(istasty = true, false)) from apple group by name;
Run Code Online (Sandbox Code Playgroud)
有什么方法可以修改我的第一个查询,以便我添加过滤器having clause以实现与bool_and在第二个查询中使用运算符获得的结果相同的结果?或者还有其他可能的方法吗?
请注意我没有使用bool_and运营商。我很感激你的时间。谢谢你。
使用bool_and运算符的替代方法是常规条件聚合:
SELECT
name,
COUNT(*) AS count,
CASE WHEN SUM(CASE WHEN !istasty THEN 1 ELSE 0 END) > 0
THEN FALSE ELSE TRUE END AS result
FROM apple
GROUP BY name;
Run Code Online (Sandbox Code Playgroud)
当您建议使用该HAVING条款时,我不确定您的想法。通过将条件检查移至HAVING子句,您可以在与条件匹配的查询中排除/包含特定组。