MySQl: Как сгруппировать ('год') столбец с форматом даты, игнорируя месяц и день - PullRequest
0 голосов
/ 04 октября 2018

Я создаю приложение с помощью Laravel.Я использую Eloquent и MySql Database.В моей базе данных 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 and day.

Вопрос:

Как группировать по столбцу 'year', но принимая во внимание только год, даже если события произошли в разные дни и месяцы?

Ответы [ 3 ]

0 голосов
/ 04 октября 2018

Вот альтернативный подход, использующий DATE_FORMAT:

$years = Event::selectRaw("DATE_FORMAT(YEAR, '%Y') AS year, COUNT(*) AS total")
    ->groupBy('year')
    ->get();

DATE_FORMAT, более гибкий, чем использование функции YEAR(), и он легко позволит нам сделать что-то вроде группы по годам имесяц, в одной колонке.

0 голосов
/ 04 октября 2018

Вы можете попробовать это

$event = Event::selectRaw('count(*) as yearTotal, YEAR(year) as yearName')->groupBy(\DB::raw('YEAR(year)'))->get();
0 голосов
/ 04 октября 2018

Поскольку вы использовали selectRaw, просто конвертируйте дату в год, чтобы вы могли группировать как обычный запрос.

$years = Event::selectRaw('count(*) as total, YEAR(year) as year')
    ->groupBy('year')
    ->get();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...