[英]MySQl: How to groupby ('year') a column with date format, ignoring month and day
我正在使用Laravel构建应用程序。 我正在使用Eloquent和MySql数据库。 在我的MySQL数据库中,有一个EVENTS表,如下所示:
id EVENT YEAR
1 event1 2000-05-27
2 event2 2018-01-01
3 event3 2000-02-12
4 event4 2000-06-03
这个例子只是为了简单起见,显然我的数据库随时都有数百个事件发生。
列年份中的数据具有“日期”格式
我需要从此MySQL表中获取每年发生的事件的履历表。 在示例中将是
year number of events
2000 3
2018 1
我这样做:
$years = Event::groupBy('year')
->selectRaw('count(*) as total, year')
->get();
我得到这个:
year number of events
2000 1
2018 1
2000 1
2000 1
因为列中的每个日期都不相同(在示例表中:2000-02-12!== 2000-06-03!== 2000-05-27)。
我需要将每年发生的所有事件汇总在一起,而不考虑mont和day。
问题是:
我如何按列“年份”分组,但即使事件发生在不同的日期和月份,也只考虑年份?
由于您使用了selectRaw,因此只需将日期转换为年份即可,因此您可以像普通查询一样进行分组。
$years = Event::selectRaw('count(*) as total, YEAR(year) as year')
->groupBy('year')
->get();
这是使用DATE_FORMAT
的另一种方法:
$years = Event::selectRaw("DATE_FORMAT(YEAR, '%Y') AS year, COUNT(*) AS total")
->groupBy('year')
->get();
DATE_FORMAT
比使用YEAR()
函数更加灵活,它可以轻松地使我们在一列中按年和月分组。
你可以试试这个
$event = Event::selectRaw('count(*) as yearTotal, YEAR(year) as yearName')->groupBy(\DB::raw('YEAR(year)'))->get();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.