mysql - 在mysql中查找所有用户购买的所有单个项目

标签 mysql sql pivot

<分区>

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

 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

我怎样才能用查询来做到这一点。谢谢

最佳答案

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

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;

关于mysql - 在mysql中查找所有用户购买的所有单个项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51972379/

相关文章:

Mysql 选择一个字段值或其逆值(之二)

mysql - phpMyAdmin,存储过程没有按预期工作

javascript - Sequelize 多个左连接

mysql - 如何将两个查询与 case 语句结合起来

Sql Pivot 和 Sql 案例中的 Sql ISNULL 条件

按 id reshape 并保持其他变量固定

php - 无法连接到xampp服务器

sql - 你能让这个查询更快吗?

java - SQL 查询中的常量

sql - 为什么我的表没有在 Postgres 中创建?