繁体   English   中英

MySQl:如何对日期格式的列进行分组(“年”),而忽略月和日

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM