如何使用mysql

时间:2015-10-14 09:02:16

标签: php mysql

我希望使用状态获得所有类别的产品。如果某些类别没有产品,则显示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

1 个答案:

答案 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