繁体   English   中英

如何使用 bigquery 从本月至今的所有卖家中获得前 1000 名卖家的交易金额百分比

[英]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 个畅销书是显而易见的。 剩余销售额和配给的计算可以通过将最后一个SELECTWITH中作为进一步的表并使用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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM