查找购买最多的产品

时间:2017-07-28 07:57:04

标签: mysql sql

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

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

此致

2 个答案:

答案 0 :(得分:2)

您希望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的数量。

答案 1 :(得分:1)

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

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