[英]how to get % of transaction amount from top 1000 sellers over all sellers, Month to Date, using bigquery
所以我有一个包含:表、shop_id 和交易金额的表。
date_key shop_id transaction_amount
2022-01-01 S_001 2000
2022-01-01 S_002 2500
2022-01-02 S_001 2600
2022-01-02 S_002 2200
.
.
.
.
目标是我想计算前 1000 名卖家 MTD 的交易金额百分比。 平均而言,我每天有大约 50,000 个卖家进行交易。 由于计算是当月至今的,所以我们有可能每天找到不同的前 1000 名卖家。
目标是在下面创建表格
date_key amount_from_top_1000_sellers(a) amount_from_all_sellers (b) ratio (a/b)
2022-01-01 4000 200000 2%
...
...
...
Window Function 将完成这项任务。 对于每一天,您都需要按销售金额列排序的row_number
。
首先我们在tbl
表中生成一些随机数据。 然后我们添加每一天的行号。 接下来,我们需要每天过滤前 100 个最畅销的商品( if
语句)。 每天增加到 1000 个畅销书是显而易见的。 剩余销售额和配给的计算可以通过将最后一个SELECT
在WITH
中作为进一步的表并使用SELECT
再次查询该表来完成。
WITH
tbl AS (
SELECT
DATE_SUB(CURRENT_DATE(),INTERVAL d day) AS date_key,
a AS shop_id,
100*RAND() AS transaction_amount
FROM
UNNEST(GENERATE_ARRAY(1,1000)) a,
UNNEST(GENERATE_ARRAY(0,10)) d ),
tmp AS (
SELECT
*,
ROW_NUMBER() OVER (PARTITION BY date_key ORDER BY transaction_amount DESC ) AS rownum
FROM
tbl )
SELECT
date_key,
SUM(transaction_amount) AS transaction_amount_total,
SUM(IF(rownum<=100,transaction_amount,0)) AS amount_from_top_100_sellers
FROM
tmp
GROUP BY 1
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.