SQL: SUM в середине запроса SELECT завершается неудачно - PullRequest
0 голосов
/ 02 июля 2018

У меня есть следующие таблицы:

Счет

  • InvoiceID
  • CompanyName

InvoiceLine

  • InvoiceLineID
  • InvoiceID
  • Сумма

Я хочу иметь следующее: Название компании и общую сумму счета с идентификатором 1760.

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

SELECT i.*, sum(il.amount) as 'Total' 
FROM invoice i JOIN invoiceLine il on  i.invoiceID = il.InvoiceID 
WHERE i.InvoiceID = 1760

Я получаю это как ошибку:

Столбец invoice.invoiceID недопустим в списке выбора, поскольку он не содержится ни в статистической функции, ни в предложении GROUP BY.

Почему возвращается ошибка и почему она хочет, чтобы я использовал предложение GROUP BY, в то время как я ожидаю, что будет возвращена только одна строка? Буду ли я обязан сделать это в 2 запроса?

Ответы [ 3 ]

0 голосов
/ 02 июля 2018

При выполнении статистических функций необходимо указать столбцы для группировки.

SELECT i.InvoiceID,i.CompanyName, sum(il.amount) as 'Total' 
FROM invoice i JOIN invoiceLine il on  i.invoiceID = il.InvoiceID 
WHERE i.InvoiceID = 1760
group by i.InvoiceID,i.CompanyName
0 голосов
/ 02 июля 2018

Вы можете использовать коррелированный подзапрос:

SELECT i.*,
       (SELCT sum(il.amount)
        FROM invoiceLine il 
        WHERE i.invoiceID = il.InvoiceID
       ) as Total
FROM invoice i 
WHERE i.InvoiceID = 1760;
0 голосов
/ 02 июля 2018

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

Попробуйте это:

SELECT i.invoiceID, i.companyName, sum(il.amount) as 'Total' 
FROM invoice i JOIN invoiceLine il on  i.invoiceID = il.InvoiceID 
WHERE i.InvoiceID = 1760
GROUP BY i.invoiceID, i.companyName
...