首页 > 解决方案 > 似乎无法按月分组

问题描述

我一直在寻找如何处理一般日期的逻辑,在这种情况下,按日期分组。

我有一个如下所示的表:

85843

我目前正在尝试统计 2016 年发生的旅行次数并按月分组,我最近的尝试如下:

SELECT 
    DATE_FORMAT(start_date, '%y-%m'), COUNT(id)
FROM
    trips
WHERE
    start_date BETWEEN '2016-01-01' AND '2016-12-31'
GROUP BY YEAR(start_date) , MONTH(start_date);

错误将是:

错误代码:1055。SELECT 列表的表达式 #1 不在 GROUP BY 子句中,并且包含在功能上不依赖于 GROUP BY 子句中的列的非聚合列“bixi.trips.start_date”;这与 sql_mode=only_full_group_by 不兼容

我还没有真正掌握使用日期的窍门,比如 group by 等,而且我发现的网站(这里这里)并不是特别有用。

感谢您的时间!

标签: mysqlsqldatedatetime

解决方案


这似乎很清楚。只需在 中使用与 中相同的group by表达式select

SELECT DATE_FORMAT(start_date, '%y-%m'), COUNT(id)
FROM trips
WHERE start_date BETWEEN '2016-01-01' AND '2016-12-31'
GROUP BY DATE_FORMAT(start_date, '%y-%m');

我也劝阻你不要使用BETWEEN. 逻辑更安全地写成:

WHERE start_date >= '2016-01-01' AND start_date < '2017-01-01'

这更安全,因为它适用于日期和日期时间。


推荐阅读