以下是我的问题的简化版本。 假设我有一个产品表
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
此致
答案 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;
演示(与
SUM
和COUNT
进行比较): http://sqlfiddle.com/#!9/b1ec57/2/0
您目前正在使用COUNT
。因此,您只能获得orders
的数量,而不会获得有序products
的数量。
答案 1 :(得分:1)
您可以将GROUP BY
与SUM
一起使用,例如:
SELECT name
FROM products
WHERE id IN (
SELECT product_id
FROM orders
GROUP BY producy_id
ORDER BY SUM(quantity) DESC
);