【问题标题】:Find most purchased product查找购买最多的产品
【发布时间】:2017-07-28 07:57:03
【问题描述】:

以下是我的问题的简化版本。 假设我有一个 products

products
-------------
id      name        
1       chocolate       
2       pepsi       
3       apple       
4       chips       

订单

orders
-------------------------------------------
id      product_id      quantity    user_id
1           1           2               1
2           1           2               2
3           1           2               3
4           1           2               4
5           2           5               5
6           2           5               6
7           3           20              7

对于用户的每次购买,我们都会在订单表中插入一行,以及产品的 ID 和他订购的数量

我想按购买的降序获取产品列表,即。从购买最多到最少。但问题在于排名不仅取决于用户购买了多少次(行数),还取决于在该单次订单中购买了多少单位

这是我尝试过的

SELECT products.name 
FROM orders left join products
ON ( orders.product_id = products.id )
GROUP by orders.product_id
ORDER by count(orders.product_id)  desc;

这显然是错误的,因为它给出了

chocolate
pepsi
apple

而不是

apple
pepsi
chocolate

问候

【问题讨论】:

  • 不应该按product_id订购,而是按数量计算吗?
  • 如果从ORDER BY 中删除desc 会发生什么?

标签: mysql sql


【解决方案1】:

你想ORDER BY数量的SUM

SELECT products.name, SUM(orders.quantity) AS sum_quantity
FROM orders LEFT JOIN products ON orders.product_id = products.id
GROUP BY orders.product_id
ORDER BY sum_quantity DESC;

演示(SUMCOUNT 的比较): http://sqlfiddle.com/#!9/b1ec57/2/0

您目前正在使用COUNT。所以你只能得到orders的数量,而不是订购的products的数量。

【讨论】:

    【解决方案2】:

    您可以将GROUP BYSUM 一起使用,例如:

    SELECT name
    FROM products
    WHERE id IN (
     SELECT product_id
     FROM orders
     GROUP BY producy_id
     ORDER BY SUM(quantity) DESC
    );
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-09-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-30
      • 2015-04-13
      • 1970-01-01
      相关资源
      最近更新 更多