我想生成一个post_no
列并将我的数据拆分成组,这样每1000个帖子就可以分组。
例如,如果我在区域A中有3222个帖子,在区域B中有4174个帖子,我希望将这些帖子分组为1000个,如下所示:
post_no id region amount
0001 - 1000 1 A 1000
1001 - 2000 2 A 1000
2001 - 3000 3 A 1000
3001 - 3222 4 A 222
0001 - 1000 5 B 1000
1001 - 2000 6 B 1000
2001 - 3000 7 B 1000
3001 - 4000 8 B 1000
4001 - 4174 9 B 174
我更喜欢使用sql或python代码来实现它。
答案 0 :(得分:2)
<强>更新强>
我刚刚重新阅读了这个问题,这个问题仍然没有多大意义,但我得出的结论是,我没有回答这里提出的问题,但我会暂时留下这个问题。如果它以某种小的方式帮助OP。
所以我想我想出了你在寻找什么。我通过稍微改变您的数据制作了一份工作样本。因此,您的post_no
值看起来像这样:110001~111000
我已将我的示例修改为1000
,因为您没有解释为什么这些值显示为这个以及我们如何使用它们。
此示例为您提供基本操作,以根据值是否可被1000整除来获取所需的amount
值。
<强>参考:强>
返回一个数字的余数除以另一个数字。
<强>示例强>
CREATE TABLE #temp
( post_no INT, id INT, region NVARCHAR(1));
INSERT INTO #temp
( post_no, id, region)
VALUES
(1000, 1, 'A'),
(2000, 2, 'A'),
(3000, 3, 'A'),
(3222, 4, 'A'),
(1000, 5, 'B'),
(2000, 6, 'B'),
(3000, 7, 'B'),
(4000, 8, 'B'),
(4174, 9, 'B');
SELECT t.post_no,
t.id,
t.region,
CASE WHEN t.post_no % 1000 = 0
THEN post_no / ROW_NUMBER() OVER (PARTITION BY t.region ORDER BY id)
ELSE t.post_no % 1000
END AS amount
FROM #temp AS t;
DROP TABLE #temp;
<强>结果:强>
post_no id region amount
----------- ----------- ------ --------------------
1000 1 A 1000
2000 2 A 1000
3000 3 A 1000
3222 4 A 222
1000 5 B 1000
2000 6 B 1000
3000 7 B 1000
4000 8 B 1000
4174 9 B 174
注意:强>
这可以进一步简化为简单地返回1000,其中数字可被1000整除,但我会将上面的内容保留为安全。替代代码如下所示:
SELECT t.post_no,
t.id,
t.region,
CASE WHEN t.post_no % 1000 = 0
THEN 1000 -- just return 1000 if it's divisible by 1000
ELSE t.post_no % 1000
END AS amount
FROM #temp AS t;