提问人:Paulo Masnik 提问时间:7/17/2023 最后编辑:Paulo Masnik 更新时间:7/17/2023 访问量:78
如何在 Snowflake 色谱柱中进行 MinMax Scale 并仍然保持色谱柱的总和?
How to do a MinMax Scale in Snowflake column and still maintain overall sum of column?
问:
我目前对 Snowflake 有一个挑战,我有一个像波纹管一样的 PRICE 列,目标是“缩放”这个值,但保持原始总和不变,比如,我不需要尊重刻度上的比例,但最低值应该继续是最低的,依此类推。 另外,我想这可能是一个SQL问题。
我尝试使用 WIDTH_BUCKET 运行脚本,但没有选项可以维护总和。
`SELECT
sale_date,
price,
WIDTH_BUCKET(price, 200000, 600000, 5) AS "SALES GROUP"
FROM home_sales
ORDER BY sale_date;`
`+------------+-----------+-------------+
| SALE_DATE | PRICE | SALES GROUP |
|------------+-----------+-------------|
| 2013-08-01 | 10 | 1 |
| 2014-02-01 | 20 | 2 |
| 2015-04-01 | 30 | 3 |
| 2016-04-01 | 10 | 1 |
| 2017-04-01 | 50 | 4 |
| 2018-04-01 | 60 | 5 |
+------------+-----------+-------------+`
我真正要找的输出(SALES GROUP 列)是这样的: 在此示例中,列价格的总 SUM 为 180。
`+------------+-----------+-------------+
| SALE_DATE | PRICE | SALES GROUP |
|------------+-----------+-------------|
| 2013-08-01 | 10 | 12 |
| 2014-02-01 | 20 | 24 |
| 2015-04-01 | 30 | 28 |
| 2016-04-01 | 10 | 12 |
| 2017-04-01 | 50 | 47 |
| 2018-04-01 | 60 | 57 |
+------------+-----------+-------------+`
如果我们对 SALES GROUP 列求和,它仍然有 180 个总数。 *OBS:我知道这并不完全是缩放,但我是雪花的新手,没有找到最正确的术语。
答:
0赞
Kathmandude
7/17/2023
#1
如何扩大自然对数以匹配总和?
select *, (ln(price) * sum(price) over() / sum(ln(price)) over())::int as scaled_price
from t;
评论
0赞
Kathmandude
7/17/2023
注意:我假设价格不能 = 0,因为在这种情况下 ln(0) 是未定义的。如果适用,请使用 case/iff 表达式来处理该问题。
评论