gpt4 book ai didi

sql - 将行分组为 5 组

转载 作者:行者123 更新时间:2023-12-01 08:29:00 24 4
gpt4 key购买 nike

表A

Col1
----------
1
2
3
4....all the way to 27
我想添加第二列,为 5 组分配一个数字。
结果
Col1         Col2
----- ------
1 1
2 1
3 1
4 1
5 1
6 2
7 2
8 2...and so on
第 6 组应该有 2 行。
NTILE 不能完成我想要的,因为 NTILE 处理组的方式,如果它们不能被整数整除。
如果分区中的行数不能被 integer_expression 整除,这将导致两个大小的组的一个成员不同。较大的组按照 OVER 子句指定的顺序排在较小的组之前。例如,如果总行数为 53,组数为 5,则前三组将有 11 行,其余两个组将各有 10 行。另一方面,如果总行数可被组数整除,则行将均匀分布在组中。例如,如果总行数为 50,并且有 5 个组,则每个存储桶将包含 10 行。
这在此 中得到了清楚的证明SQL Fiddle .第 4、5、6 组各有 4 行,而其余的有 5 行。我已经开始了一些解决方案,但它们越来越长,我觉得我错过了一些东西,这可以在一行中完成。

最佳答案

你可以使用这个:

;WITH CTE AS
(
SELECT col1,
RN = ROW_NUMBER() OVER(ORDER BY col1)
FROM TableA
)
SELECT col1, (RN-1)/5+1 col2
FROM CTE;

在您的样本数据中, col1是一个没有间隙的关联,所以你可以直接使用它(如果它是 INT )而不使用 ROW_NUMBER() .但如果不是,那么这个答案也有效。 Here is修改后的 sqlfiddle。

关于sql - 将行分组为 5 组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25436141/

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