MySQL中按类别列出的产品价格总和

MySQL中按类别列出的产品价格总和,mysql,Mysql,我有三个表,客户,产品,类别,如下所示: 顾客: id last_name ----------------- 100 Terry 200 molly 300 John 产品: id name description price category_id customer_id ------------------------------------------------------------------- 1 pro

我有三个表,
客户
产品
类别
,如下所示:

顾客:

id      last_name
-----------------
100     Terry
200     molly
300     John
产品:

id  name        description     price   category_id     customer_id
-------------------------------------------------------------------
1   product1    lorem ipsum     150     10              100
2   product2    lorem ipsum     100     10              100
3   product3    lorem ipsum     300     20              200
类别:

id  name
---------
10  bags
20  toys
30  phones
预期结果:

customerID  customerLastName    bags    toys    phones
100         Terry               250     0       0
200         Molly               0       300     0
300         John                0       0       0
如您所见,所需的结果是按类别列出的产品价格总和。因此,对于第一个客户,他只有与类别
bags
相关的产品,因此我们应该有一个
bags
列,其中产品价格的总和为(产品1为100,产品2为150,总计250)

如果客户在某个类别中没有任何产品,则该类别列中的值应为0

我试过这个:

select 
customers.id as customerID, 
customers.last_name as customerLastName, 
SUM(CASE WHEN products.category_id = 10 THEN 1 ELSE NULL END) AS 'bags',
SUM(CASE WHEN products.category_id = 20 THEN 1 ELSE NULL END) AS 'toys',
SUM(CASE WHEN products.category_id = 30 THEN 1 ELSE NULL END) AS 'phones'
from customers
left join products on products.customer_id = customers.id
left join categories on products.category_id = categories.id
group by customers.id
但我得到的结果是:

customerID  customerLastName    bags    toys    phones
100         Terry               2       0       0
200         Molly               0       1       0
300         John                0       0       0

使用
然后是products.price
更改
然后是1
,以聚合
价格
值。另外,如果您没有指定
ELSE NULL
,则默认情况下,它将仅为
NULL

select 
  customers.id as customerID, 
  customers.last_name as customerLastName, 
  SUM(CASE WHEN products.category_id = 10 THEN products.price END) AS 'bags',
  SUM(CASE WHEN products.category_id = 20 THEN products.price END) AS 'toys',
  SUM(CASE WHEN products.category_id = 30 THEN products.price END) AS 'phones'
from customers
left join products on products.customer_id = customers.id
left join categories on products.category_id = categories.id
group by customers.id

我完全忽略了这一点,谢谢,我可以问一下,如果手动为每个类别执行<代码>操作,是否有一种方法不必执行<代码>案例?@dwix如果有更多类别;这基本上意味着一个数据透视表问题。如果列数是动态的,我建议在应用程序代码中处理这个问题。不过,你可以问这个问题:完成了,我不得不等几分钟才能接受。