Mysql 中使用Case when 语句分出来月份,无法正常全部显示,求破解

各位 大家好:

在Mysql 中的原始数据只显示具体日期, 想要通过case...when..的方法将日期分类成具体的月份,并算出每个月份对应的销售总价。

如图:元数据表中包含多个月份的记录。
图片说明

但是当我尝试运行代码的时候,发现只能显示2月份的
图片说明

以下是我的SQL 代码,求高手指点迷津


SELECT 


CASE WHEN sql_data.`销售时间`BETWEEN '2016-01-01 00:00:00' AND '2016-01-31 00:00:00' THEN '1月'
     WHEN sql_data.`销售时间`BETWEEN '2016-02-01 00:00:00' AND '2016-02-28 00:00:00' THEN '2月'
     WHEN sql_data.`销售时间`BETWEEN '2016-03-01 00:00:00' AND '2016-03-31 00:00:00' THEN '3月'
     WHEN sql_data.`销售时间`BETWEEN '2016-04-01 00:00:00' AND '2016-04-30 00:00:00' THEN '4月'
     WHEN sql_data.`销售时间`BETWEEN '2016-05-01 00:00:00' AND '2016-05-31 00:00:00' THEN '5月'
     WHEN sql_data.`销售时间`BETWEEN '2016-06-01 00:00:00' AND '2016-06-30 00:00:00' THEN '6月'
     WHEN sql_data.`销售时间`BETWEEN '2016-07-01 00:00:00' AND '2016-07-31 00:00:00' THEN '7月'
     WHEN sql_data.`销售时间`BETWEEN '2016-08-01 00:00:00' AND '2016-08-31 00:00:00' THEN '8月'
     WHEN sql_data.`销售时间`BETWEEN '2016-09-01 00:00:00' AND '2016-09-30 00:00:00' THEN '9月'
     WHEN sql_data.`销售时间`BETWEEN '2016-10-01 00:00:00' AND '2016-10-31 00:00:00' THEN '10月'
     WHEN sql_data.`销售时间`BETWEEN '2016-11-01 00:00:00' AND '2016-11-30 00:00:00' THEN '11月'
     WHEN sql_data.`销售时间`BETWEEN '2016-12-01 00:00:00' AND '2016-12-31 00:00:00' THEN '12月'
     ELSE 'other'
     END AS '月份',


SUM(sql_data.`总价`) 
FROM sql_data 

图片说明

换种简单的写法,

SELECT MONTH(`销售时间`) as '月份',sum(`总价`) from sql_data
GROUP BY MONTH(`销售时间`)

数据表定义:

CREATE TABLE `sql_data` (
  `id` varchar(255) DEFAULT NULL,
  `销售时间` datetime DEFAULT NULL,
  `总价` double DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8

查询前表数据:
图片说明
查询后:
图片说明

把时间类型转换试一下。
建议你每次写case when 语句的时候先写一个条件看看能否实现效果。

在后面加个group by 1 试试呢

case when的数据类型有要求吧