Я пытаюсь выбрать даты из своей БД, а затем сгруппировать их, например, как месяцы и годы:
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
И я понятия не имею, что не так с кодом
Пожалуйста, дайте мне совет. Спасибо
Возможный дубликат MySQL: нет в GROUP BY
Вам нужно иметь элементы, которые вы группируете, в своем выборе.
Так
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;
Это из-за
sql_mode=only_full_group_by
; Может быть, вы можете попробовать такSELECT MONTH(datum), YEAR(datum), count(*) FROM zapasy GROUP BY MONTH(datum), YEAR(datum)
?