我真的很想自己解决这个问题,但我完全陷入困境。
我需要返回最常订购的前 5 件商品及其总价:
+-----+---+-----+
|name |qty|price|
+-----+---+-----+
|item1|1 |£5 |
+-----+---+-----+
|item2|4 |£1 |
+-----+---+-----+
|item1|1 |£5 |
+-----+---+-----+
|item2|5 |£1 |
+-----+---+-----+
|item1|1 |£5 |
+-----+---+-----+
|item1|1 |£5 |
+-----+---+-----+
逻辑显然是根据name
的频率对项目进行分组
然后将qty
之和与price
生成的表格应如下所示:
+-----+---+-----+-----+
|name |qty|price|total|
+-----+---+-----+-----+
|item1|4 |£5 |£20 |
+-----+---+-----+-----+
|item2|9 |£1 |£9 |
+-----+---+-----+-----+
据我所知SELECT名称,数量,价格,(SUM(数量)*价格)AS“总计”ORDER BY qty DESC LIMIT 5
但我知道这是错误的。请帮忙!
谢谢
最佳答案
你们很接近。不过,您确实需要一个group by
,并将产品放入 sum()
中:
SELECT name, count(*) as NumOrders,
SUM(qty) as qty,
SUM(qty * price) / SUM(qty) as average_price,
SUM(qty* price) AS "total"
FROM t
GROUP BY name
ORDER BY sum(qty) DESC
LIMIT 5;
编辑:
如果您知道所有行的价格都相同,则可以将其简化为:
SELECT name, count(*) as NumOrders,
SUM(qty) as qty,
price as average_price,
SUM(qty) * price AS "total"
FROM t
GROUP BY name, price
ORDER BY sum(qty) DESC
LIMIT 5;
关于mysql - 根据数量和出现次数返回最频繁的 x,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21125145/