0

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

关系图

好吧,我尝试了很多,但我无法做我需要的事情,我需要显示已购买的客户列表,例如每次购买中购买的产品最多

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

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

2号客户--->购买:

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

3号客户--->购买:

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

我的查询结果必须是:

查询结果

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

4

1 回答 1

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

然后,您可以创建此查询的聚合以查找最受欢迎项目的计数,然后再加入它以找出是哪个项目。这样做的缺点是可能为每位顾客返回多于一行。

于 2012-09-29T23:05:10.683 回答