如何计算已批准订单的金额占已下订单总金额的百分比?
How do I calculate the percentage of dollar amount of approved orders out of total dollar amount of orders placed?
我有两个table,订单和记录如下。
订单 table 有三列:
order_id seller order_price
123 abc 50
456 abc 75
789 def 60
记录 table 也有三列,其中记录了对订单所做的任何更改:
order_id log_made_at record
123 2018-08-05 11:00:00 order approved
123 2018-08-05 12:00:00 shipping city updated
123 2018-08-05 12:00:10 order declined
456 2018-08-05 12:10:00 order approved
789 2018-08-05 12:20:10 order declined
'record'列存储'order approved'、'order declined'、'shipping city updated'等字符串值。'log_made_at'列存储时间戳记录了。
如果我想计算已批准订单的美元金额占每个卖家的总订单金额($ 已批准订单金额)/($ 总订单金额)的百分比,我应该使用什么查询?我很难隔离最后一次记录的订单 'order approved' 以将其价格用作已批准订单的 $ 金额。
我希望使用上面的示例数据得到的结果如下所示:
seller approved_order_dollar_amount_percentage
abc 0.6
def 0.0
我是如何得出以上计算结果的:卖家abc有两个订单(123和456),每个订单的价格分别为50和75,所以他的总订单价格为125。但是,只有456的订单有最终日志'order approved' 自第 123 号订单最终被拒绝后做出的。所以卖家 abc 最终批准的订单美元金额百分比是 75/125 = 0.6.
我试过的查询 运行 是这个,但它总是给我错误的数字:
SELECT order_price
FROM orders o
INNER JOIN records r ON o.order_id = r.order_id
WHERE r.log_made_at IN (
SELECT MAX(log_made_at)
FROM records
GROUP BY order_id)
AND r.record = 'order approved'
)/SUM(total_order_price) AS approval_rate_by_sum
您可以使用条件聚合:
select
seller,
sum(case when r.record = 'order approved' then o.order_price else 0 end)
/ sum(o.order_price) as approved_order_dollar_amount_percentage
from orders o
left join (
select r.*, row_number() over(partition by orderid order by log_made_at desc) rn
from records r
) r on r.order_id = o.order_id and r.rn = 1
group by seller
子查询检索每个订单的最后一条记录,然后外部查询聚合并进行计算。
首先,对卖家批准的订单求和,然后将结果用作 table 计算批准订单占总订单的百分比。
select t.seller,
(t.orders_approved / (select sum(o.order_price)
from orders o
where o.seller=t.seller)
) approved_order_dollar_amount_percentage
from
(select o.seller, sum(o.order_price) orders_approved
from records r inner join orders on (o.order_id=r.order_id)
where
r.record = 'order approved'
and
r.log_mad_at = (
select max(r2.log_mad_at)
from records r2
where
r2.order_id=r.order_id
)
group by o.seller
) t
我有两个table,订单和记录如下。
订单 table 有三列:
order_id seller order_price
123 abc 50
456 abc 75
789 def 60
记录 table 也有三列,其中记录了对订单所做的任何更改:
order_id log_made_at record
123 2018-08-05 11:00:00 order approved
123 2018-08-05 12:00:00 shipping city updated
123 2018-08-05 12:00:10 order declined
456 2018-08-05 12:10:00 order approved
789 2018-08-05 12:20:10 order declined
'record'列存储'order approved'、'order declined'、'shipping city updated'等字符串值。'log_made_at'列存储时间戳记录了。
如果我想计算已批准订单的美元金额占每个卖家的总订单金额($ 已批准订单金额)/($ 总订单金额)的百分比,我应该使用什么查询?我很难隔离最后一次记录的订单 'order approved' 以将其价格用作已批准订单的 $ 金额。
我希望使用上面的示例数据得到的结果如下所示:
seller approved_order_dollar_amount_percentage
abc 0.6
def 0.0
我是如何得出以上计算结果的:卖家abc有两个订单(123和456),每个订单的价格分别为50和75,所以他的总订单价格为125。但是,只有456的订单有最终日志'order approved' 自第 123 号订单最终被拒绝后做出的。所以卖家 abc 最终批准的订单美元金额百分比是 75/125 = 0.6.
我试过的查询 运行 是这个,但它总是给我错误的数字:
SELECT order_price
FROM orders o
INNER JOIN records r ON o.order_id = r.order_id
WHERE r.log_made_at IN (
SELECT MAX(log_made_at)
FROM records
GROUP BY order_id)
AND r.record = 'order approved'
)/SUM(total_order_price) AS approval_rate_by_sum
您可以使用条件聚合:
select
seller,
sum(case when r.record = 'order approved' then o.order_price else 0 end)
/ sum(o.order_price) as approved_order_dollar_amount_percentage
from orders o
left join (
select r.*, row_number() over(partition by orderid order by log_made_at desc) rn
from records r
) r on r.order_id = o.order_id and r.rn = 1
group by seller
子查询检索每个订单的最后一条记录,然后外部查询聚合并进行计算。
首先,对卖家批准的订单求和,然后将结果用作 table 计算批准订单占总订单的百分比。
select t.seller,
(t.orders_approved / (select sum(o.order_price)
from orders o
where o.seller=t.seller)
) approved_order_dollar_amount_percentage
from
(select o.seller, sum(o.order_price) orders_approved
from records r inner join orders on (o.order_id=r.order_id)
where
r.record = 'order approved'
and
r.log_mad_at = (
select max(r2.log_mad_at)
from records r2
where
r2.order_id=r.order_id
)
group by o.seller
) t