php - 如何使用mysql中的属性获取所有类别及其产品总和

标签 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

我想得到 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/

相关文章:

php - 从 MySQL 表中选择一定百分比的行的最简单方法?

php - 为什么 strtotime() 和 date() 返回 1969-31-12?

MySQL 查询连接 3 个表,同时查找不匹配项

mysql - 通过MySQL生成密码的pbkdf2_sha256 hash

mysql - Google Cloud SQL 选择另一个表中不存在的行

php - 仅从 Laravel 集合中获取特定属性

仅第一个空白的 php explode 函数

php - a = (a + b) - (b = a); C++ 与 PHP

php - 使用 php 进行读/写负载平衡 - mongodb 与 mysql

mysql - MYSQL 查询中的子字符串索引问题