MySQL:通过查询返回月销量最高的产品
我正在尝试编写一个查询,它应该返回每月最畅销的产品。有4种不同的产品 表Product\u Sales有3个属性:Product\u ID(4种类型)、Purchase\u ID(唯一,每个产品1次购买)和Purchase\u Date: 我有一个最新的问题:MySQL:通过查询返回月销量最高的产品,mysql,group-by,count,subquery,max,Mysql,Group By,Count,Subquery,Max,我正在尝试编写一个查询,它应该返回每月最畅销的产品。有4种不同的产品 表Product\u Sales有3个属性:Product\u ID(4种类型)、Purchase\u ID(唯一,每个产品1次购买)和Purchase\u Date: 我有一个最新的问题: SELECT MONTHNAME(Purchase_Date) as "Month", Product_ID, Count(*) as "Sales_Amount" FROM Product_Sales GROUP BY MONTH(P
SELECT MONTHNAME(Purchase_Date) as "Month", Product_ID, Count(*) as "Sales_Amount"
FROM Product_Sales
GROUP BY MONTH(Purchase_Date), MONTHNAME(Purchase_Date)
ORDER BY MONTH(Purchase_Date);
当前返回:
+------------+----------+--------------+
| Month |Product_ID| Sales_Amount |
+------------+----------+--------------+
| January | 1 | 220 |
| January | 2 | 192 |
| January | 3 | 288 |
| January | 4 | 173 |
| February | 1 | 252 |
| February | 2 | 199 |
...etc.
通过查看表格,我可以看出哪个产品在每个月的销售量最大。但是我试图做一个查询,它只返回当月最畅销的产品,所以是当月名称、产品id和该产品的销售额。我无法使用MAX方法。我希望它能退回这个:
+------------+----------+--------------+
| Month |Product_ID| Sales_Amount |
+------------+----------+--------------+
| January | 3 | 288 |
| February | 1 | 252 |
| March | 3 | 288 |
| April | 2 | 343 |
| May | 1 | 272 |
etc...
我不确定这是否需要我创建函数或子查询
任何建议或帮助都将不胜感激 由于您使用的是MySQL 8.0或更高版本,因此可以使用窗口功能-
SELECT Month, Product_ID, Sales_Amount
FROM (SELECT MONTHNAME(Purchase_Date) as "Month"
,Product_ID
,Count(*) as "Sales_Amount"
,ROW_NUMBER() OVER(PARTITION BY MONTHNAME(Purchase_Date) ORDER BY MONTH(Purchase_Date) DESC) RN
FROM Product_Sales
GROUP BY MONTHNAME(Purchase_Date)
,Product_ID
ORDER BY MONTH(Purchase_Date)) X
WHERE RN = 1;
查看您使用的mysql版本是什么?8.0.12@P.Salmon'groupbymonth(Purchase_-Date),MONTHNAME(Purchase_-Date)'?是否将(*)计入“销售金额”?是否可能求和?@AnkitBajpai给我“错误代码:1248。每个派生表都必须有自己的别名”@AllenPeck,请现在再试。@AnkitBajpai我再试了一次,但它仍然给我错误代码:1055。SELECT列表的表达式#2不在GROUP BY子句中,并且包含未聚合的列“Sales_Database.Product_Sales.ProductID”,该列在功能上不依赖于GROUP BY子句中的列;这与sql\u mode=only\u full\u组不兼容_by@AllenPeck,请现在试一试。