#sql #group-by
#sql #по
Вопрос:
Необходимо исправить указанную ошибку кода для моего SQL-запроса
Ошибка: «Столбец ‘ColumnName’ недопустим в списке выбора, поскольку он не содержится ни в агрегатной функции, ни в предложении GROUP BY».
У меня сложилось впечатление, что агрегатная функция должна быть реализована, однако я не понимаю, как.
Мой запрос:
SELECT
TransactionID,
InvoiceSum.TransNum,
PosTransaction.OrderID,
PosTransaction.PatientID,
Patient.ID,
Patient.MedicalRecordNum,
PosTransaction.OfficeNum AS Pos_OfficeNum,
Patient.ExamOffice,
TransactionDate,
Patient.FirstName,
Patient.LastName,
Patient.BirthDate,
Patient.Sex,
Item.ItemNum,
Item.ItemName
FROM PosTransaction Inner Join Patient ON PosTransaction.PatientID =
Patient.ID
Inner Join InvoiceSum ON PosTransaction.TransactionID =
InvoiceSum.TransNum
Inner Join InvoiceDet ON InvoiceSum.InvoiceID = InvoiceDet.InvoiceID
Inner Join Item ON InvoiceDet.ItemID = Item.ID
GROUP BY Patient.ID
ORDER BY TransactionDate
Я ожидаю увидеть повторяющиеся имена клиентов, которые будут удалены из выходных данных, как только я правильно пойму, как использовать GROUP BY.
Ответ №1:
Если вы группируете только по пациенту.что произойдет с другими столбцами? (Сервер не знает, что он должен делать, поэтому выдает ошибку)
Сервер не знает, что вы хотите сделать с другими столбцами. (Поэтому вам нужны агрегатные функции, чтобы сообщить серверу SQL)
Простой пример:
ID|salary
01|1000
01|2000
01|3000
Если я группирую только по идентификатору здесь:
select id, salary
from sample
group by id
Как вы хотите рассчитать зарплату? Сумма, макс, мин?
Итак, вам нужна агрегатная функция:
select id, sum(salary)
from sample
group by id
Прокомментируйте ниже, если у вас есть какие-либо вопросы.