【问题标题】:Find all individual item purchase by all user in mysql [duplicate]在mysql中查找所有用户购买的所有单个项目[重复]
【发布时间】:2019-01-29 00:59:01
【问题描述】:

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

 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

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

【问题讨论】:

  • 您需要进行“反透视”。类似stackoverflow.com/questions/15184381/…
  • 这种转换称为旋转,并且已经在这里被询问和回答了很多次(几乎每天都如此)。链接重复问题的答案演示了如何在 mysql 中执行此转换。但是,请注意,与 mysql 相比,在应用程序代码中进行旋转可能更有效。

标签: mysql sql pivot


【解决方案1】:

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

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;

【讨论】:

  • 是的。它运作良好。你节省了我的时间。谢谢。那么产品无限的最佳解决方案是什么?
【解决方案2】:

如果您的采购表是静态的,最简单的方法

select 
    c.id,
    c.name,
    (select SUM(p.amount) from Purchase p where p.productId = 1 and p.clientId = c.id) as Apple,
    (select SUM(p.amount) from Purchase p where p.productId = 2 and p.clientId = c.id) as Banana,
    (select SUM(p.amount) from Purchase p where p.productId = 3 and p.clientId = c.id) as Mango,
    (select SUM(p.amount) from Purchase p where p.productId = 6 and p.clientId = c.id) as Sweet
from Client c

【讨论】:

    猜你喜欢
    • 2020-07-30
    • 2019-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-20
    • 1970-01-01
    • 2021-12-05
    • 1970-01-01
    相关资源
    最近更新 更多