我有一个名为products的表,我的查询从中检索按product_type_id分组的不同行和分组行。
这是查询,并且有效

SELECT p.*, count(p.id) as count, pt.name from products p
LEFT JOIN product_types pt on pt.id = p.product_type_id
where client_id = 777
group by product_type_id


但是,这还不够,我希望通过activated列(布尔类型)和NOT-Activated列获得一个子计数。

我想为每一行获取设置为true的产品和设置为false的产品的子计数。我想将它们作为相关行中的另一列。

可能吗?

最佳答案

如果使用的是BIT列类型,则可能需要将其转换为整数。

我建议使用CASE select语句或子选择。



活性

sum(CAST(activated as INT)) as TotalActivated


要么

(select sum(CAST(activated as INT)) FROM products WHERE product_type_id = p.product_type_id) as TotalActivated


未激活

sum(case when activated = 1 then 0 else 1 end) as NotActivated


要么

(select sum(case when activated = 1 then 0 else 1 end) FROM products WHERE product_type_id = p.product_type_id) as NotActivated

09-11 06:00