在特定条件下计算组内的百分比

Posted

技术标签:

【中文标题】在特定条件下计算组内的百分比【英文标题】:Calculating percentages within a group, given a certain condition 【发布时间】:2021-08-06 16:30:42 【问题描述】:

我有一张包含以下信息的客户订单表:

transaction_id order_id merchant_id merchant_name on_sale
423hk42b tuy24u24g 20022 This LTD Yes
h64v64h6 tuy24u24g 20022 This LTD Yes
h3v45gh3 4i32ghi2i 22012 That SAS No
b3k45b44 2b34u3bbu 12032 Stuff LTD No
jb435bj4 1j3bh1hj3 12032 Stuff LTD Yes
jb3k53kb 12hb3jbb1 13121 More Stuff LTD Yes

我需要一个查询来查找每个商家的销售订单百分比。输出应如下所示:

merchant_id merchant_name total_orders total_orders_on_sale perc_sales_orders
20022 This LTD 1381 132 9.55
22012 That SAS 1313 87 6.62
12032 Stuff LTD 1323 34 2.56

对此有什么帮助吗?我尝试了窗口函数或 WITH 语句,但最终得到了错误的数字。

【问题讨论】:

【参考方案1】:

我想你想要聚合:

select merchant_id, merchant_name,
       count(*) as num_orders,
       sum(case when on_sale = 'Yes' then 1 else 0 end) as num_on_sale,
       avg(case when on_sale = 'Yes' then 1.0 else 0 end) as ratio_on_sale
from t
group by merchant_id, merchant_name;

编辑:

修改版可以使用count(distinct):

select merchant_id, merchant_name,
       count(distinct order_id) as num_orders,
       count(distinct case when on_sale = 'Yes' then order_id end) as num_on_sale,
       ( count(distinct case when on_sale = 'Yes' then order_id end) * 100.0 /
         count(distinct order_id)
       ) as ratio_on_sale
from t
group by merchant_id, merchant_name;

【讨论】:

我忘记包含原始表中的 transaction_id。我需要计算不同的订单 ID,因为它们是唯一标识符。因此,SUM 语句将不起作用,因为它会包含重复项。我无法删除重复项,因为我需要其他信息。对这里的混乱表示歉意。

以上是关于在特定条件下计算组内的百分比的主要内容,如果未能解决你的问题,请参考以下文章

如何计算 R 中多列的组内百分比变化?

将数据框与其他数据框合并并根据特定条件计算分组百分比

计算给定条件的百分比

如何计算百分比条件聚合

组内的 Cumsum 并在 pandas 的条件下重置

计算机视觉:如何获得包含特定纹理的图像百分比?