2016-05-28 2 views
0
Select Books.Category, Books.Retail, 
Round(Orderitems.Quantity * (Books.Retail - Books.Cost),0) AS Category_Profit 
From Books 
INNER JOIN Orderitems 
ON BOOKS.Retail=ORDERITEMS.Paideach 
Group by Books.Category, Books.Retail 

Что я пытаюсь сделать, это показать категорию и общую сумму прибыли для каждой категории. Есть две таблицы, участвующиеГруппа По выражению запроса

Books Table = Category & Retail & Cost 
Orderitems Table= Quantity & Paid each 

Так, например, категория

Sports = Football, Basketball 
Food = Chicken, Beef 

Результат покажет розничные цены на Football + Баскетбол в одной категории, а в другой строке он будет показывать Цыпленок + говядина как один

Отношение между двумя таблицами заключается в том, что розничная = платная каждая Также пытается округлить значение Category_Profit до ближайшего полного значения.

Я получаю ошибку ORA-00979: Не GROUP BY выражение в строке 2

+0

Я не понимаю, все, что вы описываете, но это звучит, как вы просто забыли использовать 'функцию sum'. (например: 'sum (...) as category_profit') – sstan

+0

, так что в основном на данный момент отображается вывод (Категория, розничная торговля, категория_profit) --- (Спорт, 50, 17) --- (Спорт, 29,8) Я хочу, чтобы «слить» эти две категории спорта и отобразить их как один, чтобы он показывал (Sports, 79, 25) – aofe1337

+1

Это выглядит странно. 'retail' - это сумма, и вы присоединяетесь к таблицам на сумму? I. Все книги с 'retail' = 50 соединяются со всеми orderitems с' paideach' = 50? Это не может быть желательным, не так ли? Кроме того: если вам нужна одна строка результатов для каждой категории, то группа по категориям. Почему вы группируете по категориям + в розницу? Это не дает вам одной строки результатов для каждой категории, кроме одной для каждой категории. В то время как вы говорите, что хотите получить итоговые значения, так где же добавление в ваш запрос? Вы суммировали бы несколько записей с помощью 'SUM'. –

ответ

2

Это звучит, как вам нужно только группе category, не retail. Но тогда вам нужно использовать агрегатную функцию sum для других значений:

Select Books.Category, 
     sum(Books.Retail), 
     Round(sum(Orderitems.Quantity * (Books.Retail - Books.Cost)),0) AS Category_Profit 
    From Books 
INNER JOIN Orderitems 
    ON BOOKS.Retail=ORDERITEMS.Paideach 
Group by Books.Category 
+1

Я собирался дать тот же ответ, когда я вдруг заметил, что OP присоединяется к таблицам на сумму. Таким образом, на вопрос ответит, но запрос скорее всего семантически неверен. –

+0

@Thorsten: Вы абсолютно правы. OP: вы можете дважды проверить состояние соединения. – sstan

+0

'sum (Books.Retail)' не входит в предложение 'select', не более, чем' Books.Retail'. Очевидно, что «Books.Retail» - это розничная цена отдельной книги; он не имеет смысла в запросе, который вычисляет общую прибыль, генерируемую категорией. – mathguy

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