我根据他们所居住的国家/地区拥有一些用户记录。假设他们都住在美国。我想将总用户分为4组。这些组应该是,如果总共有5000个用户,那么每个段应该有1250个用户。我尝试在ROW_NUMBER的基础上这样做。我得到了每条记录的计数,如1,2,3等等,直到5000.但我需要在相同的查询中做到这一点,而不知道我有的总记录。我尝试通过选择RowNumber< = MAX(Rownumber)/ 4等记录来做到这一点。如果有人可以建议我的逻辑,因为我无法共享查询或记录。提前谢谢。
答案 0 :(得分:0)
您可以找到总和,并将其分为4个
result = 5000/4
0 to result
result+1 to result*2
result*2+1 to result*3
result*3+1 to result*4
并使用以下内容 `SELECT * 从 (选择rownum rnum , 一个。* 来自某事a 按名称排序 ) 在10和20之间的最小值; 您甚至可以从with子句中的子句移动它,如下所示
WITH b AS (选择rownum rnum , 一个。* 从某个ORDER BY名称 ) SELECT * FROM b 在10和20之间的任何地方;`
refereed enter link description here
答案 1 :(得分:0)
如何使用case语句创建组,然后在where子句中引用它们?这也让您有机会创建更多/更少的组。所以像:
select *, case when RowNumber<=MAX(Rownumber) then group4
when RowNumber<=MAX(Rownumber)/4*3 then group3
when RowNumber<=MAX(Rownumber)/4*2 then group2
when RowNumber<=MAX(Rownumber)/4 then group1 END AS groupvariable
from "your table"
您可以尝试在初始脚本中创建case语句(创建一个新表),这也可以让您分别更改组的数量,但不确定sql是否允许您创建组并在其中过滤相同的查询
答案 2 :(得分:0)
你可以使用如下的ntile:
Select *, [Segment] = ntile(4) over(partition by Users order by [RowNumber]) from YourTable
此处它将根据您的列的用户订单提供4个细分...我在此提及RowNumber,考虑到您的表格中有一些序列号