mysql - 根据数量和出现次数返回最频繁的 x

标签 mysql sql database grouping

我真的很想自己解决这个问题,但我完全陷入困境。

我需要返回最常订购的前 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/

相关文章:

database - 使用遗留数据库、新数据库和 Redis 缓存层的新 node.js 应用程序

mysql - 在 bash 脚本中运行时删除查询执行非常慢

php - 我可以在准备好的语句中参数化表名吗?

SQL:为什么 SYS.COLUMNS 显示我的列具有与我设置的属性不同的属性

sql - 没有动态 SQL 的动态搜索

database - 在远程机器上创建 PostgreSQL 数据库

mysql - 我可以在我的网站前面放一个缓存服务器吗?

MySQL根据列值选择多列

mysql - 查询合并相同列名的两个表

mysql 从连接记录中获取总行数