2014-10-22 4 views
-2

Использование w3schools database, информация о порядке заказа для каждой страны со следующими столбцами (см. Подсказку/примечания в [] по каждому столбцу) и сортировать данные в порядке убывания по значению TotalOrderAmount.Группа запросов SQL по

• Страна
• OrderCount [количество заказов для каждой страны]
• ItemCount [сумма всех величин продукции для каждой страны]
• TotalOrderAmount [общая стоимость заказа для всех заказов для каждой страны, закругленные до двух знаков после запятой] • AvgOrderSize [TotalOrderAmount/OrderCount, округляется до двух знаков после запятой]

у меня есть следующий скелет, но я застрял на том, как группу по стране .. EDITED - ошибка 1: не могу подготовить инструкцию (1 нет такой колонки: TotalOrderAmount)

SELECT 
s.Country, COUNT(od.OrderID) AS OrderCount, sum(od.quantity) AS ItemCount, ROUND(sum(od.quantity*p.price),2) AS TotalOrderAmount, Avg(TotalOrderAmount/OrderCount) 

FROM Suppliers AS s 

JOIN Products AS p 
    ON p.SupplierID = s.SupplierID 
JOIN  OrderDetails AS od 
    ON od.ProductID = p.ProductID 
JOIN  Orders AS o 
    ON o.OrderID = od.OrderID 

Group by s.Country 

Любая помощь приветствуется! Спасибо

+0

Где вы застряли? Получаете ли вы ошибку или неожиданный вывод? Во-первых, я предлагаю вам удалить конечную запятую после 's.County,' rename's.County' в 's.Country' и поместить что-то в эти агрегированные функции' sum() ' –

+0

ошибка 1: не удалось подготовить оператор (1 рядом «2»: синтаксическая ошибка) – eri

+0

и после того, как вы примените мои предложенные изменения, какова ошибка? –

ответ

-1

В группе вы должны включить все столбцы в свой запрос.

+1

Нет. Вы включаете только нужные столбцы и не включаете столбцы в агрегированные функции. –

+0

, если вы используете postgres, вот как я вижу. Но в mysql вы устанавливаете только тот, который вам нужен. –

0

Во-первых, я предлагаю вам удалить Запятую после s.County, переименовывать s.County в s.Country и положить что-то в этой сумме() агрегатные функции

Я думаю Avg (TotalOrderAmount/OrderCount) не является действительным , так как нет столбца, называемого TotalOrderAmount. Вы должны подставить свое выражение для TotalOrderAmount (ROUND (sum.cantity * p.price), 2)) здесь, поскольку оно не существует в качестве столбца

И так нет колонки счетчика заказов вам нужно будет сделать то же самое для этого

Смежные вопросы