mysql - 按月分组并显示每个月对应的值

标签 mysql sql database

Hi All 通过根据日期对销售额进行分组来查询显示每个月的销售额。
但我想在其销售额旁边显示每个月。 我尝试了以下查询,它将只返回销售额。但没有几个月。

SELECT 
CASE 
    WHEN created_at BETWEEN "2012-01-01" and "2012-01-31" THEN "Jan"
    WHEN created_at BETWEEN "2012-02-01" and "2012-02-28" THEN "Feb"
    WHEN created_at BETWEEN "2012-03-01" and "2012-03-31" THEN "Mar"
    WHEN created_at BETWEEN "2012-04-01" and "2012-04-30" THEN "April"
    WHEN created_at BETWEEN "2012-05-01" and "2012-05-31" THEN "May" 
    WHEN created_at BETWEEN "2012-06-01" and "2012-06-30" THEN "June"
    WHEN created_at BETWEEN "2012-07-01" and "2012-07-31" THEN "July"
    WHEN created_at BETWEEN "2012-08-01" and "2012-08-31" THEN "Aug"
    WHEN created_at BETWEEN "2012-09-01" and "2012-09-30" THEN "Sep"
    WHEN created_at BETWEEN "2012-10-01" and "2012-10-31" THEN "Oct"
    WHEN created_at BETWEEN "2012-11-01" and "2012-11-30" THEN "Nov"
    ELSE "Dec" 
END AS "month" , SUM(grand_total) AS total
FROM sales
WHERE created_at >="2012-01-01" AND created_at <="2013-01-01"
GROUP BY TIMESTAMPDIFF(MONTH, "2012-01-01" + INTERVAL 1 DAY, created_at)

我如何在销售额旁边显示月份,如下所示。

+------+-------+
| Month| Total |
+------+-------+
| Jan  |  1200 |
| Feb  |  5555 |
| Mar  |  1235 | 
| Apr  |  1299 | 
+------+-------+

提前致谢。

最佳答案

试试这个:

SELECT MONTHNAME(created_at) AS month , SUM(grand_total) AS total
FROM sales
WHERE created_at BETWEEN '2012-01-01' AND '2013-01-01'
GROUP BY MONTHNAME(created_at)

关于mysql - 按月分组并显示每个月对应的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18474323/

相关文章:

SQL查询性能问题(多子查询)

MySQL 通配符与 concat 匹配

mysql存储函数使用

database - ERD图中使用的继承符号是什么?

php - 使用 SUM 计算多列中的值

sql - 解释不带组使用时的 COUNT 返回值

sql - 用于在结果集中自动编号行的纯 SQL 技术

sql - 从数据库中提取值 > 1.00

.net - 选择哪个数据库以及如何压缩它

sql - 将计算列设置为非 Null 时遇到问题