powered by simpleCommunicator - 2.0.50     © 2025 Programmizd 02
Форумы / MySQL [игнор отключен] [закрыт для гостей] / 1055 - Expression #3 of SELECT list is not in GROUP BY clause and contains nonaggregated c
6 сообщений из 6, страница 1 из 1
1055 - Expression #3 of SELECT list is not in GROUP BY clause and contains nonaggregated c
    #40023815
rubiks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день. Помогите плиз. Желательно еще чтобы ткнули что конкретно нужно почитать, чтобы понять в чем ошибка.

Вот таблица с данными:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
ELEMENTS
id, name 
1   элем1
2   элем2
3   элем3


ELEMENT_USER_GROUP
element_id, user_id
1           3
1           4
2           4


ELEMENT_STRINGS
id,  element_id, user_id
1    1           3   
2    1           4
3    1           7
4    2           5
5    2           8



Задача вот в чем:

У меня на входе есть:
user_id

Получить нужно через таблицу ELEMENT_USER_GROUP все element_id, которые относятся к этому пользователю.
Затем, связывая таблицу ELEMENT_STRINGS получить user_id, но именно тот user_id, который в строке имеет меньший ELEMENT_STRINGS.id
Т.е. у нас есть user_id = 4

Код: sql
1.
2.
3.
4.
У меня должны выйти:
element_id   ELEMENT_STRINGS.id  user_id
1             1                   3
2             4                   5



Делаю вот такой запрос:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
SELECT
`e_u_g`.`element_id`,
MIN(`e_s`.`id`),
`e_s`.`user_id` AS `user_id_all`

FROM  `ELEMENT_USER_GROUP` AS `e_u_g`
LEFT JOIN `ELEMENT_STRINGS` AS `e_s` ON `e_s`.`element_id` = `e_u_g`.`element_id`

WHERE `e_u_g`.`user_id` = '2'
GROUP BY `e_s`.`element_id`



Приходит такая ошибка:
Код: sql
1.
#1055 - Expression #3 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'e_s.user_id' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by




Когда я убираю из селекта:
`e_s`.`user_id` AS `user_id_all`
То, запрос нормально работает.
И приходит MIN(`e_s`.`id`). Так почему же mysql не может выдать мне соответствующую строку с `e_s`.`user_id`?
Что я делаю не так?
...
Рейтинг: 0 / 0
1055 - Expression #3 of SELECT list is not in GROUP BY clause and contains nonaggregated c
    #40023823
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rubiks
Так почему же mysql не может выдать мне соответствующую строку с `e_s`.`user_id`?
Соответствующую чему?

А если выключить sql_mode=only_full_group_by (в старых версиях и ограничения такого не было), то MySQL выдаст значение из произвольной записи на свое усмотрение в пределах группы по e_s.element_id.
...
Рейтинг: 0 / 0
1055 - Expression #3 of SELECT list is not in GROUP BY clause and contains nonaggregated c
    #40023839
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rubiks
Делаю вот такой запрос:
Код: sql
1.
2.
3.
4.
5.
6.
SELECT
`e_u_g`.`element_id`,
MIN(`e_s`.`id`),
`e_s`.`user_id` AS `user_id_all`
...
GROUP BY `e_s`.`element_id`


Ну вот давай подумаем.

Ты группируешь по `e_s`.`element_id` .

Вот сервер взял все объединённые записи, у которых значение этого поля совпадает. В этих записях встречаются разные значения полей `e_s`.`user_id` и `e_s`.`id` . Со вторым полем всё понятно, серверу оставлена чёткая инструкция - взять минимальное значение. он это легко выполнит. А вот с первым полем - неувязочка. Не сказали серверу, что с этим набором значений делать, что именно вернуть - вернуть-то он может только одно значение...

Так что у сервера просто нет выбора кроме как сообщить, что он не знает, что делать:
rubiks
Приходит такая ошибка:

#1055 - Expression #3 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'e_s.user_id' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
...
Рейтинг: 0 / 0
1055 - Expression #3 of SELECT list is not in GROUP BY clause and contains nonaggregated c
    #40023946
rubiks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina
rubiks
Делаю вот такой запрос:
Код: sql
1.
2.
3.
4.
5.
6.
SELECT
`e_u_g`.`element_id`,
MIN(`e_s`.`id`),
`e_s`.`user_id` AS `user_id_all`
...
GROUP BY `e_s`.`element_id`


Ну вот давай подумаем.

Ты группируешь по `e_s`.`element_id` .

Вот сервер взял все объединённые записи, у которых значение этого поля совпадает. В этих записях встречаются разные значения полей `e_s`.`user_id` и `e_s`.`id` . Со вторым полем всё понятно, серверу оставлена чёткая инструкция - взять минимальное значение. он это легко выполнит. А вот с первым полем - неувязочка. Не сказали серверу, что с этим набором значений делать, что именно вернуть - вернуть-то он может только одно значение...

Так что у сервера просто нет выбора кроме как сообщить, что он не знает, что делать:
rubiks
Приходит такая ошибка:

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


Это я понимаю.
Не понимаю вот что:
MIN(`e_s`.`id`) - вполне конкретный id. У этого поля есть соответсвующая строка. И там есть единственный `e_s`.`user_id`.
Почему именно его msql и не возвращает.

И как тогда правильно делать запрос?
...
Рейтинг: 0 / 0
1055 - Expression #3 of SELECT list is not in GROUP BY clause and contains nonaggregated c
    #40023972
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rubiks

MIN(`e_s`.`id`) - вполне конкретный id.
За пределами агрегатной функции известно только значение, а из какой именно записи оно взялось - неизвестно. Возможно из одной, возможно из нескольких, возможно из всех в пределах группы. Могут быть одинаковые значения в разных записях, а может быть сама функция такая, что использует значения из всех записей, например, AVG или SUM.

rubiks
И как тогда правильно делать запрос?
Если версия MySQL до 8, то см. FAQ: Выборка первой/последней записи в группах . Если 8 и старше, то аналитическими функциями.
...
Рейтинг: 0 / 0
1055 - Expression #3 of SELECT list is not in GROUP BY clause and contains nonaggregated c
    #40024012
paver
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
rubiks

Не понимаю вот что:
MIN(`e_s`.`id`) - вполне конкретный id. У этого поля есть соответсвующая строка. И там есть единственный `e_s`.`user_id`.
Почему именно его msql и не возвращает.

Представьте, что в списке селекта будут одновременно и MIN и MAX, значениям которых будут соответствовать 2 конкретные строки. Какую из них должен выдать сервер? А если SUM?
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / 1055 - Expression #3 of SELECT list is not in GROUP BY clause and contains nonaggregated c
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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