【问题标题】:MySQL: Return the Highest Monthly Selling product with QueryMySQL:使用查询返回最高月销量产品
【发布时间】:2019-10-20 08:54:06
【问题描述】:

我正在尝试编写一个查询,该查询应该返回每月销量最高的产品。有4种不同的产品。

Product_Sales 表有 3 个属性:Product_ID(4 种类型)、Purchase_ID(唯一且每个产品 1 个购买)和 Purchase_Date:

我有一个当前的查询:

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 group-by count subquery max


【解决方案1】:

由于您使用的是 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;

【讨论】:

  • '按月分组(Purchase_Date),MONTHNAME(Purchase_Date)'?计数(*)为“Sales_Amount”?总和可能吗?
  • @AnkitBajpai 给我“错误代码:1248。每个派生表都必须有自己的别名”
  • @AllenPeck,请立即尝试。
  • @AnkitBajpai 我又试了一次,但它仍然给出错误代码:1055。SELECT 列表的表达式 #2 不在 GROUP BY 子句中,并且包含非聚合列 'Sales_Database.Product_Sales.ProductID' 这是在功能上不依赖于 GROUP BY 子句中的列;这与 sql_mode=only_full_group_by 不兼容
  • @AllenPeck,请立即尝试。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-06
  • 1970-01-01
  • 2021-12-21
  • 1970-01-01
  • 2014-06-26
  • 1970-01-01
相关资源
最近更新 更多