SQL: недопустим в списке выбора, потому что он не содержится ни в агрегатной функции, ни в предложении GROUP BY

Вопрос:left join ( SELECT my_number, MAX(id) as id FROM table1 GROUP BY location ) newNum on newNum.Part = c.OtherPart left join table2 t2 on t2.id = newNum.id and t2.site = a.site Ситуация: у меня есть поля данных (среди прочих) my_number, location и id в таблице1. В таблице 2 у меня есть поля данных (среди прочего)

Вопрос:left join ( SELECT my_number, MAX(id) as id FROM table1 GROUP BY location ) newNum on newNum.Part = c.OtherPart left join table2 t2 on t2.id = newNum.id and t2.site = a.site

Ситуация: у меня есть поля данных (среди прочих) my_number, location и id в таблице1. В таблице 2 у меня есть поля данных (среди прочего) id, site, date. Я присоединяюсь к ним к другим представлениям/таблицам (c и a), которые имеют одни и те же поля данных и my_numbers.

Моя цель: Каждый my_number имеет несколько идентификаторов, и я хочу наибольшее значение id для каждого сайта. Вот почему я использовал группу по сайту. Затем мне нужно получить “дату” my_number на основе идентификатора, потому что вторая таблица не содержит my_number, а всего лишь его идентификатор. Всего есть 3 сайта, поэтому мне нужно 3 наибольшее значение id для каждого сайта. Затем я хочу получить “дату” этих трех значений id

Таблица вывода ex:

a.num a.site a.date c.OtherPart T2.date 15 TN 1.1.16 17 3.19.16 15 FL 2.21.16 17 4.22.16 15 TX 1.7.15 17 3.21.16 Лучший ответ:

Не уверен, что именно вы хотите сделать для своего sql, вы должны получать только столбцы, которые отображаются в GROUP BY или в другом столбце в функции агрегата, в любом случае попробуйте это;)

left join ( SELECT my_number, id FROM table1 T1, (SELECT location, MAX(id) as id FROM table1 GROUP BY location) TMP WHERE T1.id= TMP.id AND T1.location = TMP.location ) newNum on newNum.Part = c.OtherPart left join table2 t2 on t2.id = newNum.id and t2.site = a.site

И вы также можете исправить эту ошибку, следуя sql, но не можете делать то, что хотите,

left join ( SELECT location, MAX(id) as id FROM table1 GROUP BY location ) newNum on newNum.Part = c.OtherPart left join table2 t2 on t2.id = newNum.id and t2.site = a.site Ответ №1

Когда вы помещаете что-то вроде max(column) в SQL-запрос, функция max работает с набором значений столбца из группы. Если вы определили свой запрос с группой, чтобы результаты были сгруппированы, каждый столбец (кроме того, на котором вы группируетесь) имеет несколько значений.

В вашем случае location имеет одно значение (это то, что вы группируете), но my_number и id имеют несколько значений. Если my_number (1,2,3,4) и id равен (5,6,7,8), вы можете отображать сумму (my_number) или max (my_number), но, очевидно, вы не можете отобразить в одной строке ‘ number ‘my_number. Это не число, а список.

Это означает, что в сообщении об ошибке говорится: “SQL: недопустим в списке выбора, потому что он не содержится ни в агрегатной функции, ни в предложении GROUP BY” Если вы поместите столбец my_column в функцию агрегата (например, sum), это будет работать, или если вы добавите его в раздел group by, он будет работать.

Оцените статью
Добавить комментарий