我想使用状态获取所有类别及其产品的总和。如果某些类别没有产品则显示 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
我想得到 if product is_half = 1
then sum using 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
最佳答案
目前,即使没有产品,它也会对 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
关于php - 如何使用mysql中的属性获取所有类别及其产品总和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33120999/