У меня есть задание, которому нужен этот запрос: Напишите оператор SELECT, который возвращает одну строку для каждого клиента, имеющего существующий порядок. Включите эти столбцы: таблицу EmailAddress из таблицы Customers, сумму покупок из таблицы orderitems (количество * цена) и сумму скидок из таблицы orderitems (discountAmount * количество). Сортируйте результирующий набор в нисходящей последовательности по общей цене товара для каждого клиента.Группа по запросу, возвращающему более одной строки
Обычный столбец между таблицей Customers или таблицы OrderItems отсутствует, поэтому я сделал соединение с тремя таблицами. Используя заказы table.I закончили с этим кодом:
SELECT EmailAddress, SUM(ItemPrice)*Quantity AS TotalSum, SUM(DiscountAmount)*Quantity AS TotalDiscount
FROM Customers JOIN Orders
ON Customers.CustomerID = Orders.CustomerID
JOIN OrderItems ON Orders.OrderID = OrderItems.OrderID
GROUP BY EmailAddress, ItemPrice, Quantity
ORDER BY TotalSum DESC;
Однако, она возвращается более чем на 1 строку на адрес электронной почты, если они имели несколько заказов, когда должна быть только одна строка для каждого клиента. Я не уверен, почему возвращаются несколько строк.
Я пытался группировать только по адресу электронной почты, и я получил ошибки о том, что «ItemPrice» и «Количество» были признаны недействительными в списке выбора, потому что они не содержатся ни в агрегатной функции или предложения GROUP BY. Каково решение этого вопроса, не включив их в предложение Group By? – Scarlet