我正在尝试获取一个结果集并将其分成三组不同大小的组。我一直在查看 ntile、rank、row number 但无法弄清楚。
我可以选择前 n%。但是我需要下一个 n%。
我需要分成以下不同大小的组。15%、42.5%、42.5%。创建一个 15% 的对照组和两个版本从剩余的记录中平均分割。
以前的要求是 50-50 拆分,我只是使用带有行号的模数,但不确定这是否也适用。
我可以编写更新语句或存储过程来完成此操作,但我更愿意在查询中执行此操作。
我正在尝试获取一个结果集并将其分成三组不同大小的组。我一直在查看 ntile、rank、row number 但无法弄清楚。
我可以选择前 n%。但是我需要下一个 n%。
我需要分成以下不同大小的组。15%、42.5%、42.5%。创建一个 15% 的对照组和两个版本从剩余的记录中平均分割。
以前的要求是 50-50 拆分,我只是使用带有行号的模数,但不确定这是否也适用。
我可以编写更新语句或存储过程来完成此操作,但我更愿意在查询中执行此操作。
这个或类似的东西应该这样做:
DECLARE @TotalRows float
SELECT @TotalRows = count(*)
from MyTable
SELECT Col1, Col2, ColEtc, Ranking
,case
when Ranking < @TotalRows * .15 then 1
when Ranking < @TotalRows * .575 then 2
else 3
end Ranking
from (select Col1, Col2, ColEtc
,row_number() over (order by Col1) Ranking
from MyTable) xx
order by xx.Ranking, xx.Col1, xx.Col2
这两个查询可以与 CTE 结合使用,但这似乎过于复杂。您需要检查特定于您的数据的边缘情况。