我有一个名为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