1с столбец недопустим в списке выбора поскольку он не содержится ни в агрегатной функции

Обновлено: 05.07.2024

У меня есть ошибка - Столбец "Employee.EmpID" недопустим в списке выбора, потому что он не содержится ни в агрегатной функции, ни в предложении GROUP BY.

Эта ситуация вписывается в ответ, данный Биллом Карвином.

коррекция выше, вписывается в ответ ExactaBox -

Я не понимаю, почему я получаю эту ошибку. Все, что я хочу сделать, это присоединиться к таблицам, а затем объединить всех сотрудников в определенном месте.

Я думаю, что у меня есть частичное объяснение для моего собственного вопроса. Скажите мне, нормально ли это -

Чтобы сгруппировать всех сотрудников, работающих в одном месте, мы должны сначала упомянуть LocationID.

Тогда мы не можем/не указывать каждый идентификатор сотрудника рядом с ним. Скорее, мы упомянем общее количество сотрудников в этом месте, то есть мы должны SUM() сотрудников, работающих в этом месте. Почему мы делаем это последним способом, я не уверен. Таким образом, это объясняет часть ошибки "не содержится в агрегатной функции".

Каково объяснение части "GROUP BY" части ошибки?

ОТВЕТЫ

Ответ 1

Предположим, что у меня есть следующая таблица T :

И я делаю следующий запрос:

Выход должен иметь две строки, одну строку, где a = 1 и вторую строку, где a = 2.

Но что должно значить значение b в каждой из этих двух строк? В каждом случае есть три возможности, и ничто в запросе не дает понять, какое значение выбрать для b в каждой группе. Это двусмысленно.

Это демонстрирует правило единственного значения, которое запрещает результаты undefined, которые вы получаете при запуске запроса GROUP BY, и включаете любые столбцы в списке выбора, которые не являются ни частью критериев группировки, ни появляются в совокупные функции (SUM, MIN, MAX и т.д.).

Фиксация может выглядеть так:

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

Ответ 2

Ваш запрос будет работать в MYSQL , если вы отключите ONLY_FULL_GROUP_BY режим сервера (и по умолчанию он есть). Но в этом случае вы используете разные РСУБД. Чтобы заставить ваш запрос работать, добавить все неагрегированные столбцы в ваше предложение GROUP BY , например

Неагрегированные столбцы означают, что столбец не переходит в агрегированные функции, такие как SUM , MAX , COUNT и т.д.

Ответ 3

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

Похоже, что вы хотите, чтобы вывод инструкции SQL отображал список всех сотрудников компании, но сначала все люди в офисе Анахайма, затем люди в офисе Буффало, затем люди в офисе в Кливленде (A, B, C, получите его, очевидно, я не знаю, какие у вас есть).

В этом случае потеряйте оператор GROUP BY. Все, что вам нужно, это ORDER BY loc.LocationID

Ответ 4

В основном, эта ошибка говорит о том, что если вы собираетесь использовать предложение GROUP BY , тогда ваш результат будет отношением/таблицей со строкой для каждой группы, поэтому в вашем заявлении SELECT вы будете может только "выбрать" столбец, который вы группируете, и использовать агрегатные функции в этом столбце, потому что другие столбцы не будут отображаться в результирующей таблице.

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

Я думаю, что у меня есть частичное объяснение на мой вопрос. Скажите мне, если его ОК -

сгруппировать всех сотрудников, которые работают в одном и том же местоположение мы должны сначала упомянуть LocationID.

тогда мы не можем / не упоминаем каждый идентификатор сотрудника рядом с ним. Скорее, мы упоминаем общее количество сотрудников в этом месте, т. е. мы должны суммировать() сотрудников, работающих в этом месте. Почему мы делаем это последним способом, я не уверен. Таким образом, это объясняет часть ошибки "она не содержится ни в одной из агрегатных функций".

каково объяснение для GROUP BY часть Предложения ошибки ?

Предположим, у меня есть следующая таблица T :

и я делаю следующий запрос:

выход должен иметь две строки, одна строка, где a=1 и второй ряд, где a=2 .

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

этот демонстрирует один-значение, который запрещает неопределенные результаты, которые вы получаете при запуске группы по запросу, и вы включаете любые столбцы в список выбора, которые не являются частью критериев группировки и не отображаются в агрегатных функциях (SUM, MIN, MAX и т. д.).

исправление может выглядеть так:

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

ваш запрос будет работать в MYSQL Если вы хотите отключить ONLY_FULL_GROUP_BY режим сервера (и по умолчанию это). Но в этом случае вы используете разные СУБД. Поэтому, чтобы ваш запрос работал, добавить все неагрегированных столбцов на GROUP BY предложения, например

Неагрегированные столбцы означает, что столбец не переходит в агрегированные функции, такие как SUM , MAX , COUNT , etc..

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

в этом случае, потерять Группа по заявлению. Все, что вам нужно-это ORDER BY loc.LocationID

в основном, эта ошибка говорит о том, что если вы собираетесь использовать GROUP BY предложение, тогда ваш результат будет отношением / таблицей со строкой для каждой группы, поэтому в вашем вы можете только "выбрать" столбец, который вы группируете, и использовать агрегатные функции в этом столбце, потому что другие столбцы не будут отображаться в результирующей таблице.

Читайте также: