SQL 具有仅包含另一列的部分功能的查询?
SQL query with having function to only includes parts of another column?
我正在尝试寻找 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
如何排除你知道不好的 fact_order_ids?
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%'
);
根据你的 PostgreSQL 年龄,你能试试这个吗?
select fact_order_id
from my_table
group by fact_order_id
having bool_and((category_group like 'Beverage%'));
根据您的评论,您可以试试这个查询并分享您的结果吗?
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'
您可以在支票中加入您的table,看看是否有问题。从 SQL 的角度来看,以下查询是荒谬的,但它会自动执行您的 cross-checking:
with bev_orders as (
select fact_order_id
from my_table
group by fact_order_id
having bool_and((category_group like 'Beverage%'))
)
select *
from my_table t
join bev_orders b
on b.fact_order_id = t.fact_order_id
where t.category_group not like 'Beverage%' ;
我正在尝试寻找 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
如何排除你知道不好的 fact_order_ids?
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%'
);
根据你的 PostgreSQL 年龄,你能试试这个吗?
select fact_order_id
from my_table
group by fact_order_id
having bool_and((category_group like 'Beverage%'));
根据您的评论,您可以试试这个查询并分享您的结果吗?
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'
您可以在支票中加入您的table,看看是否有问题。从 SQL 的角度来看,以下查询是荒谬的,但它会自动执行您的 cross-checking:
with bev_orders as (
select fact_order_id
from my_table
group by fact_order_id
having bool_and((category_group like 'Beverage%'))
)
select *
from my_table t
join bev_orders b
on b.fact_order_id = t.fact_order_id
where t.category_group not like 'Beverage%' ;