MySQL中的查询和子查询向客户展示购买的产品

时间:2012-09-29 22:21:18

标签: mysql nested

我有一个问题,这是我的简单图表:

relationship diagram http://i45.tinypic.com/121c48m.png

好吧,我尝试了很多而且我不能做我需要的东西,我需要显示已经购买的顾客列表,例如每次购买时购买的产品最多,

客户编号1 --->买入:

  • 4个鸡汤
  • 3肉汤
  • 2虾汤

客户编号2 --->购买:

  • 1个鸡汤
  • 1肉汤
  • 2虾汤

客户编号3 --->购买:

  • 4个鸡汤
  • 8肉汤
  • 1虾汤

我的查询结果必须是:

query result http://i45.tinypic.com/2ni9w87.png

请帮我正确地进行这个mysql查询

1 个答案:

答案 0 :(得分:1)

我可以想到两种方法。第一种是使用子选择来查询每个客户最受欢迎的项目:

SELECT nameCustomer AS customer_name, (
    SELECT idItem
      FROM detailSale
      INNER JOIN sales on sales.idDetail = detailSale.idDetail
      WHERE sales.idCustomer = cliente.idCustomer
      GROUP BY idItem
      ORDER BY SUM(amountBuyItem) DESC
      LIMIT 1
  )
  FROM cliente

请注意,此查询不完整,因为它只显示项目的ID,因此您需要加入itemForSale表以检索其名称。

另一种方法是从一个查询开始,该查询将按照受欢迎程度显示每个客户的所有项目:

SELECT idCustomer, idItem, SUM(amountBuyItem) AS totalBuyItem
  FROM detailSale
  INNER JOIN sales on sales.idDetail = detailSale.idDetail
  GROUP BY idCustomer, idItem
  ORDER BY idCustomer, idItem DESC

然后,您可以创建此查询的聚合以查找最受欢迎项目的计数,然后联接回来查找该项目。这样做的缺点是每个客户可能会返回多行。