gpt4 book ai didi

MySQL = 按月份对销售计数进行分组,然后将月份显示为名称(一月、二月...十二月)而不是数值(1,2,3-12)

转载 作者:行者123 更新时间:2023-11-29 09:32:26 27 4
gpt4 key购买 nike

这似乎是一个相当简单的问题,但我不知道如何在销售计数按月份分组后将月份的数值更改为月份的实际名称。

基本上我想列出每个月的销售总额。目前,这就是我所拥有的:

SELECT MONTH(SaleDate) as "Month", Count(*) as "TotalSales"
FROM Sale
GROUP BY MONTH(SaleDate);

这非常适合我想做的事情。并给出结果:

+---------------------------------+
| Month | TotalSales |
+---------------------------------+
| 1 | 123 |
| 2 | 142 |
| 3 | 183 |
| 4 | 99 |
| 5 | 127 |
| 6 | 202 |
+---------------------------------+
etc....

但是我希望列表中包含一月、二月等月份。

我尝试了使用 MONTHNAME()、MONTHNAME(STR_TO_DATE) 等多种方法,但对月份进行分组似乎会导致问题。

我觉得我缺少一个非常简单的解决方案,但无法在网上找到任何解决方案。作为引用,销售表中的日期为默认日期(2017-01-01 或 YYYY-MM-DD)。 sale表有3个属性:SaleID、StoreID、SaleDate。

+---------------------------------+
| Month | TotalSales |
+---------------------------------+
| January | 123 |
| February | 142 |
| March | 183 |
| April | 99 |
| May | 127 |
| June | 202 |
+---------------------------------+
and so on...

这是我从我尝试过的方法中收到的错误消息:

Error Code: 1055. Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'UsedCarDealer.Sale.SaleDate' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by

谢谢!

最佳答案

我建议:

SELECT MONTHNAME(SaleDate) as "Month", Count(*) as "TotalSales"
FROM Sale
GROUP BY MONTH(SaleDate), MONTHNAME(SaleDate)
ORDER BY MONTH(SaleDate);

这还将按时间顺序返回值。注意:使用月份时,将年份作为过滤器或包含在 GROUP BY 中通常是有意义的。也许更好的查询版本是:

SELECT YEAR(SaleDate) as Year, MONTHNAME(SaleDate) as "Month", Count(*) as "TotalSales"
FROM Sale
GROUP BY YEAR(SaleDate), MONTH(SaleDate)
ORDER BY MIN(SaleDate);

关于MySQL = 按月份对销售计数进行分组,然后将月份显示为名称(一月、二月...十二月)而不是数值(1,2,3-12),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58416989/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com