gpt4 book ai didi

sql - 使用 tsql 根据不同百分比分配记录

转载 作者:行者123 更新时间:2023-12-03 02:59:27 25 4
gpt4 key购买 nike

我有一个大约有 800k 行的项目表。我需要创建一个 SQL 语句,允许我的用户传递总计 100% 的各种百分比,并限制为 5 个百分比。然后使用它们按每个百分比的组号对行进行分组。

例如,用户可以请求使用以下随机百分比分割行(用户决定百分比):

 1. 20%, 20%, 30%, 30% 
2. 12%, 12%, 12%, 12%, 52%
3. 30%, 30%, 40%
4. 100%

根据上述百分比,我需要返回以下内容:

Field 1    | Field 2    | Group
--------------------------------
Data | Data | 1
Data | Data | 1

该组将代表与百分比相对应的数字。因此,例如上面的百分比 #1,将有 4 组,第一组的记录是所有选定项目的第 20%,第 2 组是接下来的 20%,第三组是接下来的 30%,第四组是最后30%。因此,如果总共有 200 条记录,则第 1 组应有 40 条记录,第 2 组应有 40 条记录,第 3 组应有 60 条记录,第 4 组应有 60 条记录。

抱歉,如果我解释过多,但试图减少我的问题中的任何歧义,以便清楚。

此数据存储在 Azure SQL 中,因此提供的任何解决方案都可以使用 Azure SQL 和/或 SQL 2016(在大多数情况下)提供的任何内容。

提前感谢那些 SQL 天才,他们一定会让我同时感到感激和自卑! :)

最佳答案

传递百分比是困难的部分。该工作由 percent_rank() 完成:

with p as (
select ind, p, (sum(p) over (order by ind) - p) as cume_p
from (values (1, 0.2), (2, 0.2), (3, 0.3), (4, 0.4)) v(ind, p)
)
select t.*, v.grp
from (select t.*, percent_rank() over (order by ?) as pr
from t
) t cross apply
(select max(ind)
from p
where p.cume_p <= t.pr
) v(grp);

关于sql - 使用 tsql 根据不同百分比分配记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50547235/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com