2013-07-10 2 views
-1

У меня есть категория, Подкатегория и Доходы.Процент от общей выручки

Category Sub-Category Revenue  Percentage 
--------------------------------------------------------- 
Books  Text Books  5000  (5000/14000)*100 
      Comics Books 6000 
      Horror Books 3000 

Теперь, мой вопрос: как достичь этого, используя SQL?

Мне нужен процент от общего объема продаж для этой категории.

+0

Пожалуйста, укажите, что вы попытались. – Romesh

+0

Дорогой друг Вы также должны указать пример кода, который вы пробовали, и по какой-то причине не работает – Romesh

+0

@ RJ1990: используйте '((сумма (доход) свыше (разделение по категориям))/доход) * 100 в процентах' в выбранном вами statement –

ответ

2

Вы можете использовать analytical SUM function:

select 
    Category, 
    SubCategory, 
    Revenue, 
    Revenue * 100/sum(Revenue) over (partition by Category) as Percentage 
from 
    yourTable 
; 
1

Вы можете использовать подзапрос, чтобы получить общий доход и использовать его в расчетах.

SELECT category, sub-category, revenue, 
((revenue/
    SELECT sum(inne.revenue) 
    FROM table inne 
    WHERE inne.category = oute.category) * 100) AS percentage 
FROM table oute 
+0

Это возвращает только желаемый результат, если в этой таблице есть только одна категория. Если их несколько («Книги», «DVD», ...), это не сработает. –

+0

@ DanielHilgarth Вы правы, я исправил это. –

+1

@AngeloNeuschitzer: +1 для разных ответов :), но он менее оптимизирован, чем другие –

6

Oracle имеет RATIO_TO_REPORT аналитическую функцию, которая вычисляет отношение значения к сумме набора значений.

select category, subcategory, revenue, 
     round((ratio_to_report(revenue) over (partition by category) * 100),2) as percentage 
from mytable; 

Выход:

CATEGORY SUBCATEGORY REVENUE PERCENTAGE 
----------------------------------------- 
books  text   5000  35.71 
books  horror  3000  21.43 
books  comics  6000  42.86 

Образец скрипку here

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