具有功能的SQL查询仅包含另一列的一部分?

问题描述

我正在尝试查找具有仅饮料项目的fact_order_id。这将使fact_order_id不包含任何食品。

fact_order_id
fact_order_line_id
category Group
category Name

我在下面使用了2个单独的SQL查询。当我回去检查工作时,我发现输出不是仅饮料的订单中有一些fact_order_id。这是给我相同输出的2个单独的SQL查询

select fact_order_id
from my_table
group by fact_order_id
having avg((category_group like 'Beverage%')::int) = 1;


select fact_order_id
from my_table
group by fact_order_id
having avg(CASE WHEN category_group like 'Beverage%' THEN 1 ELSE 0 END)=1;

以上两个输出都给我相同的行数。每当我交叉检查fact_order_id时,其中一些都会包含带有食品的输出

由于该订单上还有其他非饮料类物品,因此我的输出中不应包含此fact_order_id。有2个具有饮料名称的类别组(饮料(非酒精)和饮料(专业))。是否有更好的方法来创建SQL查询,使其仅输出仅饮料订单的fact_order_id?

我正在使用Postgresql版本:08.00.0002

解决方法

根据PostgreSQL的年龄,您可以尝试一下吗?

const net = await posenet.load({
   architecture: "MobileNetV1",outputStride: 16,inputResolution: {width: 360,height: 640},multiplier: 0.75
});

this.Pose = await net.estimateSinglePose(imageElement);
net.dispose();
return this.Pose;

根据您的评论,可以请您尝试这个查询并分享您的结果吗?

select fact_order_id
  from my_table
 group by fact_order_id
having bool_and((category_group like 'Beverage%'));

您可以在检查中重新加入表中,以查看是否存在问题。从SQL的角度来看,以下查询是毫无意义的,但它将自动进行交叉检查:

select fact_order_id,category_group,category_name,(category_group like 'Beverage%') as is_beverage
  from my_table
 where fact_order_id = '1 292 757'
,

如何排除您不知道的fact_order_id?

select distinct fact_order_id
from my_table
where fact_order_id not in (
    select distinct fact_order_id
    from my_table
    where not category_group like 'Beverage%'
);