Как я могу упорядочить по столбцу, который я не хочу отображать в выводе?

Я пытаюсь создать запрос для отображения определенных данных в определенной группе и порядке. Единственная проблема, которая у меня есть, заключается в том, что для получения правильного порядка данных в столбцах мне нужно упорядочить их по столбцу, который я не ВЫБРАН и не хочу отображать.

Поэтому, когда я пытаюсь ORDER BY этого столбца, я получаю сообщение об ошибке:

«Столбец ** недопустим в предложении ORDER BY, поскольку он не содержится ни в агрегатной функции, ни в предложении GROUP BY».

Есть ли синтаксис, который позволит мне это сделать? Вот запрос, с которым я работаю:

select Pr.EmployeeNo as EmpNo, EmployeeFName as EmpFName, EmployeeLName as EmpLName,
ProjectName, ProjectStartDate as ProjStartDate, JobName as Job, JobRate, HoursWorked as Hours
from Employee as Em join ProjEmp as Pr on Em.EmployeeNo = Pr.EmployeeNo
                    join Project as Pt on Pr.ProjectID = Pt.ProjectID
                    join Job as Jb on Em.JobID = Jb.JobID
Group by Pr.EmployeeNo, EmployeeFName, EmployeeLName, ProjectName, ProjectStartDate, JobName, JobRate, HoursWorked

что является правильным порядком, в котором у вас нет порядка в вашем запросе

nbk 18.02.2023 19:49

@нбк. Order BY не был в примере, потому что столбца, по которому мне нужно было упорядочить, не было в Select или GROUP BY. Я понял, что могу заказать столбец, если добавлю его в GROUP BY.

Arthwys Ironhand 18.02.2023 19:59

БУНА НЕТ. В этом случае существует исключение, когда используется предложение GROUP BY, а предложение ORDER BY позволяет группировать по столбцам и функциям.

Bogdan Sahlean 18.02.2023 21:18

Я ПОНЯЛ ЭТО примерно через 4 минуты после публикации вопроса и ответил на него ниже. Однако спасибо за ваш вклад. Я просто два дня не могу пометить свой ответ как ответ... Возможно, мод мог бы сделать это быстрее?

Arthwys Ironhand 18.02.2023 21:31

@ArthwysIronhand - модераторы не могут помечать ответы как принятые. Вы оценили, отвечает ли другой опубликованный ответ на вопрос и должен ли он быть выбран в качестве принятого ответа в любом случае? Он был опубликован до вашего и на первый взгляд кажется более полным, так почему вы хотите выбрать именно свой?

Martin Smith 18.02.2023 22:09
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
4
5
54
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Остановитесь и прочитайте полную ошибку еще раз. Он точно говорит вам, что происходит. Подсказка: проблема не в том, что он отсутствует в предложении SELECT. Нет причин, по которым вы не можете сделать это:

SELECT ColumnA
FROM [Table1]
ORDER BY ColumnB

Проблема в том, что у вас есть пункт GROUP BY:

Column is invalid in the ORDER BY clause because it is not
contained in either an aggregate function or the GROUP BY clause.

И это имеет смысл. Скажем, у вас есть эта таблица:

Столбец А Столбец B СтолбецC 1 2 3 1 4 9 2 6 7 2 8 5

А затем попробуйте запустить этот запрос:

SELECT ColumnA, MAX(ColumnB)
FROM [Table]
GROUP BY ColumnA
ORDER BY ColumnC

Этот запрос пытается выполнить ORDER BY ColumnC, но в каждой группе имеется более одного значения для ColumnC! У нас есть две группы в ColumnA: 1 и 2. Группа 1 имеет два значения «С»: 3 и 9. Группа 2 также имеет два значения «C»: 7 и 5. В зависимости от того, какие строки выбраны, вы можете получить разные порядки.

А вот с ColumnA все в порядке, потому что это часть выражения GROUP BY. Это означает, что мы знаем, какое значение использовать. MAX(ColumnB) тоже нормально, потому что MAX() — агрегатная функция. Он говорит нам, какое значение из группы использовать детерминированным образом. Но ссылка на ColumnC неоднозначна(!), и поэтому не разрешена.

Итак, в SQL из вопроса вы можете использовать любой из этих столбцов для предложения ORDER BY:

Pr.EmployeeNo, EmployeeFName, EmployeeLName, ProjectName, ProjectStartDate, JobName, JobRate, HoursWorked

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

Спасибо за такой подробный ответ. Я писал свой собственный ответ, когда вы опубликовали это.

Arthwys Ironhand 18.02.2023 19:57

Я понял. Ответ заключался в том, чтобы добавить столбец в GROUP BY. Поскольку я не выбрал столбец, он не будет отображаться. НО ГРУППИРОВКА ПО столбцу позволяет мне ЗАКАЗАТЬ по нему, и он не будет отображаться, потому что на самом деле он не был ВЫБРАН.

Извините за беспокойство.

Другие вопросы по теме