gpt4 book ai didi

postgresql - 在 Postgresql 中,分组后,如果某一列的任何值为 false,则返回 false。如果所有值都为true/false,则分别返回true/false

转载 作者:行者123 更新时间:2023-11-29 11:35:50 27 4
gpt4 key购买 nike

我有一个名为“apple”的表,我编写了以下查询:

select name, 
count(name),
case when istasty is null then false else istasty end
from apple
group by name, istasty;

这是输出:

enter image description here

我正在尝试使用以下条件对 nameistasty 标志进行分组:

  1. 当对应的姓名列同时为true或false时,返回false。在上图中,tala 同时具有 truefalse istasty 列。但是,我想返回 false,因为它至少有一个 false istasty 列。
  2. 如果在对特定名称列的所有 istasty 列进行分组后为 true,则返回 true;同样,如果所有 istasty 列都是 false,则为该特定名称列返回 false

我可以通过编写查询在 postgresql 中使用 bool_and 运算符:

select name, count(name), bool_and(coalesce(istasty = true, false)) from apple group by name;

enter image description here

有什么方法可以修改我的第一个查询,以便我在 having 子句 中添加过滤器,以获得与我在第二个查询中使用 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;

当您建议使用 HAVING 子句时,我不确定您的想法是什么。通过将条件检查移至 HAVING 子句,您可以在查询中排除/包含与条件匹配的特定组。

关于postgresql - 在 Postgresql 中,分组后,如果某一列的任何值为 false,则返回 false。如果所有值都为true/false,则分别返回true/false,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48858501/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com