ВЫБЕРИТЕ дату, а затем поместите ее в группу

Я пытаюсь выбрать даты из своей БД, а затем сгруппировать их, например, как месяцы и годы:

May 2019
June 2018
etc.

БД -дата типа дата

У меня есть этот код:

  SELECT datum, count(*) FROM zapasy GROUP BY datum

Это делает его каждый день, но я не хочу этого, поэтому я искал, как сделать его групповым по месяцам и годам, а не только по дням.

 SELECT datum, count(*) FROM zapasy GROUP BY MONTH(datum), YEAR(datum)

и я придумал это, однако я получаю эту глупую ошибку

#1055 - Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'zapasy_db_test.zapasy.datum' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by

И я понятия не имею, что не так с кодом

Пожалуйста, дайте мне совет. Спасибо

Это из-за sql_mode=only_full_group_by; Может быть, вы можете попробовать так SELECT MONTH(datum), YEAR(datum), count(*) FROM zapasy GROUP BY MONTH(datum), YEAR(datum) ?

FanoFN 22.05.2019 10:40

Возможный дубликат MySQL: нет в GROUP BY

Topher 22.05.2019 10:45
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
В предыдущем посте мы создали функциональность вставки и чтения для нашей динамической СУБД. В этом посте мы собираемся реализовать функции обновления...
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
Роли и разрешения пользователей без пакета Laravel 9
Роли и разрешения пользователей без пакета Laravel 9
Этот пост изначально был опубликован на techsolutionstuff.com .
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
0
2
63
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Вам нужно иметь элементы, которые вы группируете, в своем выборе.

Так

 SELECT MONTH(datum), YEAR(datum), count(*) from ...  group by MONTH(datum), YEAR(datum)

вместо данных, в противном случае в столбце дат, который вы выбираете, будет день, который вы получите только из данных, и это не имеет никакого отношения к счету и группе и будет неверным, или группировка не будет вообще не работает.

Ответ принят как подходящий

Я заметил, что желаемый результат находится в этом формате May 2019 etc. Вы знаете, что DATE тип данных такой, yyyy-mm-dd поэтому, если вы действительно хотите извлечь месяц-год в этом формате, вы можете попробовать следующее:

SELECT DATE_FORMAT(datum, '%b %Y') AS 'Monthyear', COUNT(*) 
FROM zapasy 
GROUP BY Monthyear;

Другие вопросы по теме