powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / MySQL [игнор отключен] [закрыт для гостей] / помогите с запросом с группировкой по датам
8 сообщений из 8, страница 1 из 1
помогите с запросом с группировкой по датам
    #39833629
tadeyiloda
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
есть запрос
Код: sql
1.
SELECT DATE_FORMAT(imported_date, '%m-%Y') as d from `order` group by month(imported_date), year(imported_date) 


но он не работает
такой запрос тоже не работает
Код: sql
1.
SELECT concat(month(imported_date), year(imported_date)) as d from `order` group by month(imported_date), year(imported_date) 


зато такой запрос работает
Код: sql
1.
SELECT DATE_FORMAT(imported_date, '%m-%Y') as d from `order` group by DATE_FORMAT(imported_date, '%m-%Y')



почему? особенно не понятно с запросом 2
вроде группировку понимаю, но тут совсем не понятно
кто объяснит?
...
Рейтинг: 0 / 0
помогите с запросом с группировкой по датам
    #39833633
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tadeyiloda,

Первый и не должен работать.
А от второго покажите сообщение об ошибке.
...
Рейтинг: 0 / 0
помогите с запросом с группировкой по датам
    #39833640
tadeyiloda
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ошибка
автор#1055 - Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'order_system.order.imported_date' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
...
Рейтинг: 0 / 0
помогите с запросом с группировкой по датам
    #39833679
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sql_mode= only_full_group_by

Т.е. любое поле (в т.ч. выражение) выходного набора обязано быть либо в списке выражений группировки, либо быть аргументом агрегатной функции. Причём поле/выражение в данном случае понятие скорее литеральное (с точностью до формализованного выражения без учёта детерминированных функций), а не смысловое - если в списке вывода есть выражение field1+field2, а в списке группировки field2+field1, то это РАЗНЫЕ литералы, а вот SIN(field) в списке вывода и ABS(field) в выражении группировки - допустимы.
...
Рейтинг: 0 / 0
помогите с запросом с группировкой по датам
    #39833681
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кстати, в третьем запросе можно использовать алиас выходного набора вместо его выражения:

Код: sql
1.
2.
3.
SELECT DATE_FORMAT(imported_date, '%m-%Y') as d 
FROM order
GROUP BY d
...
Рейтинг: 0 / 0
помогите с запросом с группировкой по датам
    #39833683
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вернее, алиас можно использовать в любом из трёх запросов. Просто первые два лишь формально останутся теми же.
...
Рейтинг: 0 / 0
помогите с запросом с группировкой по датам
    #39833692
tadeyiloda
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Akinasql_mode= only_full_group_by

Т.е. любое поле (в т.ч. выражение) выходного набора обязано быть либо в списке выражений группировки, либо быть аргументом агрегатной функции. Причём поле/выражение в данном случае понятие скорее литеральное (с точностью до формализованного выражения без учёта детерминированных функций), а не смысловое - если в списке вывода есть выражение field1+field2, а в списке группировки field2+field1, то это РАЗНЫЕ литералы, а вот SIN(field) в списке вывода и ABS(field) в выражении группировки - допустимы.
получается нужно отключать sql_mode= only_full_group_by чтобы заработал запрос с concat?
странное поведение, это баг?
версия 5.7
...
Рейтинг: 0 / 0
помогите с запросом с группировкой по датам
    #39833778
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tadeyilodaполучается нужно отключать sql_mode= only_full_group_by чтобы заработал запрос с concat?Нет. Наоборот - надо писать запросы так, чтобы они соответствовали стандарту, а не локальному расширению для ленивых пользователей. Т.е. третий запрос - это правильный вариант, соответствующий стандарту, и именно таким и должен быть запрос. А отключение only_full_group_by для того, чтобы получить возможность говнокодить - это явно не best practice...
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / помогите с запросом с группировкой по датам
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]