【发布时间】:2020-08-23 19:23:42
【问题描述】:
我正在尝试查找包含仅饮料商品的 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
【问题讨论】:
-
您能否在小提琴中重现该问题:dbfiddle.uk/?rdbms=postgres_9.5
标签: sql postgresql unique where-clause having