JT Tomato� 2019-05-28 11:24 采纳率: 16.7%
浏览 880
已采纳

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 

图片说明

  • 写回答

4条回答 默认 最新

  • Json-Huang 2019-05-28 13:03
    关注

    换种简单的写法,

    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
    

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

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?