我希望使用状态获得所有类别的产品。如果某些类别没有产品,则显示0。 我的类别表是
------------------------
id | category |
------------------------
1 | Apple |
2 | Samsung |
我的产品表是
----------------------------------------
id |Name |category_id|is_half
----------------------------------------
1 |iphone 4s|1 |1
2 |iphone 5s|1 |0
3 |iphone 6 |1 |1
如果产品is_half = 1
然后使用0.5 else 1求和,我想得到。结果是
--------------------------------
id | category |total
--------------------------------
1 | Apple |2
2 | Samsung |0
我尝试使用此查询,但运气不好
select c.id, c.name, sum(case when p.is_half then 0.5 else 1 end) as total
from category c left join products p
on p.category_id = c.id
group by c.id
答案 0 :(得分:3)
目前,即使没有产品,它总和1
。添加另一个WHEN
以避免这种情况。
SELECT
c.id,
c.category,
SUM(
CASE WHEN p.id IS NULL THEN 0
WHEN p.is_half THEN 0.5 ELSE 1 END
)
AS total
FROM
category c
LEFT JOIN
products p
ON
p.category_id = c.id GROUP BY c.id
此外,您选择了c.name
,这是无效的字段名称。我将其更改为c.category
。
<强>输出强>
--------------------------------
id | category |total
--------------------------------
1 | Apple |2
2 | Samsung |0
参见 SQL Fiddle