Получить общую скидку с помощью SQL-запроса - PullRequest
0 голосов
/ 25 июня 2019

У меня есть запрос, который вычисляет скидку на каждый товар. Теперь я хочу получить полную скидку. Как я могу это сделать?

Мой запрос для расчета скидки:

select (dla.unit_list_price + dla.unit_selling_price) * dla.ordered_qty as discount
       , dla.itemname as item_name 
 from doo_lines_all dla

Например, ниже приведены возвращенные данные запроса, который я сделал.

Item_Name        Discount
Item1            50
Item2            25
Item3            30

Теперь я хочу получить общую скидку, которая, как я ожидал, составит 105

Ответы [ 5 ]

1 голос
/ 25 июня 2019

попробуйте использовать функцию "СУММА", как это

SUM((dla.unit_list_price + dla.unit_selling_price) * dla.ordered_qty) as discount
1 голос
/ 25 июня 2019

Вам придется отказаться от названия предмета:

select sum((dla.unit_list_price + dla.unit_selling_price) * dla.ordered_qty) as totaldiscount
from doo_lines_all dla

В результате будет получен только один вывод (одна строка, один столбец) «105»

Если вы хотите сохранить название товара и в строках указать индивидуальную скидку и повторяющуюся сумму, мы можем использовать аналитику:

select 
  dla.itemname,
  (dla.unit_list_price + dla.unit_selling_price) * dla.ordered_qty as discount,
  sum((dla.unit_list_price + dla.unit_selling_price) * dla.ordered_qty) over() as totaldiscount

from doo_lines_all dla

Это выдаст результат как:

Item_Name        Discount  TotalDiscount
Item1            50        105
Item2            25        105
Item3            30        105

Существуют и другие способы достижения того же самого, но аналитическую функцию, пожалуй, проще всего написать, хотя, возможно, сложнее понять, чем сделать это:

select 
  dla.itemname,
  (dla.unit_list_price + dla.unit_selling_price) * dla.ordered_qty as discount,
  t.totaldiscount

from doo_lines_all dla
cross join
(
  select sum((unit_list_price + unit_selling_price) * ordered_qty) as totaldiscount
  from doo_lines_all
) t

Это вычисляет сумму в подзапросе, а затем соединяет ее с каждой строкой из dla через перекрестное соединение. Можно подумать, что он работает так же, как аналитика / это один из способов понять, как работает аналитика

1 голос
/ 25 июня 2019

Сумма запрос:

select sum((dla.unit_list_price + dla.unit_selling_price) * dla.ordered_qty) as discount
       , dla.itemname as item_name 
 from doo_lines_all dla

SUM возвращает сумму значений expr.

0 голосов
/ 25 июня 2019

Вы можете использовать grouping sets

with doo_lines_all( discount, item_name ) as
(
 select 50, 'Item1' from dual union all
 select 25, 'Item2' from dual union all
 select 30, 'Item3' from dual
)
select item_name, 
       sum( discount ) as discount 
  from doo_lines_all dla
 group by grouping sets(item_name,())
 order by item_name;

ITEM_NAME   DISCOUNT
---------   --------
Item1       50
Item2       25
Item3       30
            105

для возврата суммы скидок в виде отдельной строки.

0 голосов
/ 25 июня 2019

Вы можете использовать SUM аналитическую функцию

with tab as(
  select 'item1' as item , 50 as discount from dual union all
  select 'item2' as item , 25 as discount from dual union all
  select 'item3' as item , 30 as discount from dual 
)
select t.*
     , sum(t.discount) OVER () AS total_discount
from tab t;
ITEM  | DISCOUNT | TOTAL_DISCOUNT
:---- | -------: | -------------:
item1 |       50 |            105
item2 |       25 |            105
item3 |       30 |            105

дБ <> скрипка здесь

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