mysql - 似乎无法按月分组
问题描述
我一直在寻找如何处理一般日期的逻辑,在这种情况下,按日期分组。
我有一个如下所示的表:
我目前正在尝试统计 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 等,而且我发现的网站(这里和这里)并不是特别有用。
感谢您的时间!
解决方案
这似乎很清楚。只需在 中使用与 中相同的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'
这更安全,因为它适用于日期和日期时间。
推荐阅读
- jquery - jQuery:选择类等于特定类的nth-child(1)
- string - 带递归的 MIPS 程序
- godot - 导航瓷砖地图,无需手动放置可步行瓷砖
- php - 如何将 img src URL 作为特色图片
- bash - for循环追加变量bash 6
- python - OSError:请求的地址在其上下文中无效
- java - 如何在 ArrayList 中返回下一个和上一个对象
- python - csvjoin 错误:“强制转换为 Unicode:需要字符串或缓冲区,找到 LazyFile”
- haskell - 模块“Main”未导出 IO 操作“main”
- visual-studio-code - 我如何在 Windows 的 Visual Studio Code 中保存 Gitlab 用户名和密码?