首页 > 解决方案 > 在 mysql 中查找所有用户购买的所有单个项目

问题描述

我有三个表,例如客户、产品和采购。 购买:

 id     productId clientId     amount 
    1       1        2          2500
    2       2        3          3500
    3       3        4          4500
    4       6        1          5500
    5       1        2          1500
    6       3        3          2000
    7       3        2          1000

客户:

id    name
1     A
2     B
3     C
4     B

产品:

id    product
1      Apple
2      Banana
3      Mango
6      Sweet

我可以查询这个

SELECT client.id, client.client_name, product.product, purchase.amount from client INNER JOIN purchase ON client.id=purchase.clientId INNER JOIN product ON product.id=purchase.productId GROUP BY client.id

我的输出是:

id  client_name   product       amount
1       A          Sweet         5500
2       B          Apple         2500
3       c          Mango         3500
4       D          Banana        4500

但我想要输出,比如每个客户购买的数量在哪里

期望的输出:

id  client_name  Apple  Banana Mango Sweet
1       A         x        x     x     x
2       B         X        x     x     x
3       c         X        x     x     x 
4       D         x        x     x     x

我如何通过查询来做到这一点。谢谢

标签: mysqlsqlpivot

解决方案


如果您的产品有限,那么我将使用条件聚合:

SELECT c.id, c.client_name,
       SUM(CASE WHEN pd.id = 1 THEN p.Amount ELSE 0 END) AS Apple,
       SUM(CASE WHEN pd.id = 2 THEN p.Amount ELSE 0 END) AS Banana,
       SUM(CASE WHEN pd.id = 3 THEN p.Amount ELSE 0 END) AS Mango,
       SUM(CASE WHEN pd.id = 6 THEN p.Amount ELSE 0 END) AS Sweet
FROM client c INNER JOIN 
     purchase p 
     ON c.id = p.clientId INNER JOIN 
     product pd 
     ON pd.id = p.productId 
GROUP BY c.id, c.client_name;

推荐阅读