我有一个查询,可以计算每个商品的折扣。现在我要的是获得折扣的总额。我该怎么办?
我要计算折扣的查询是:
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
答案 0 :(得分:1)
here查询:
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的值之和。
答案 1 :(得分:1)
尝试使用“ SUM”功能 像这样
SUM((dla.unit_list_price + dla.unit_selling_price) * dla.ordered_qty) as discount
答案 2 :(得分:1)
您将不得不放弃商品名称:
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连接到每一行。您可能会认为它与分析工作相同/这是思考分析工作方式的一种方法
答案 3 :(得分:0)
您可以使用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
db <>提琴here
答案 4 :(得分:0)
您可以使用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
将折扣总和作为单独的一行返回。