我有 table :
+ID+Duration+Cost_change+Def_cost+
| 1| 0.10 | 0.191 | 13.700 |
| 2| 0.15 | 0.291 | 21.200 |
| 3| 0.14 | 0.043 | 17.500 |
| 4| 0.10 | 2.131 | 19.000 |
| 5| 0.10 | 3.000 | 11.000 |
| 6| 0.19 | 1.100 | 18.500 |
| 7| 0.10 | 0.000 | 14.000 |
| 8| 0.10 | 0.000 | 13.000 |
| 9| 0.18 | 0.000 | 15.000 |
|10| 0.10 | 4.100 | 12.000 |
|11| 0.14 | 0.000 | 9.800 |
|12| 0.10 | 0.000 | 7.000 |
+--------+--------+--------+
我有一个额外的列(组),它按 3 行 1、1、1、2、2、2、3、3、3、4、4、4 等对值进行分组。稍后我将不得不按这些组聚合 (SUM,AVG) 值。目标 - 减少 3 倍的行数(不丢失数据)。 将不胜感激任何建议。
期待:
+ID+Duration+Cost_change+Def_cost+Groups
| 1| 0.10 | 0.191 | 13.700 | 1个
| 2| 0.15 | 0.291 | 21.200 | 1个
| 3| 0.14 | 0.043 | 17.500 | 1个
| 4| 0.10 | 2.131 | 19.000 | 2个
| 5| 0.10 | 3.000 | 11.000 | 2个
| 6| 0.19 | 1.100 | 18.500 | 2个
| 7| 0.10 | 0.000 | 14.000 | 3个
| 8| 0.10 | 0.000 | 13.000 | 3个
| 9| 0.18 | 0.000 | 15.000 | 3个
|10| 0.10 | 4.100 | 12.000 | 4个
|11| 0.14 | 0.000 | 9.800 | 4个
|12| 0.10 | 0.000 | 7.000 | 4个
+--------+--------+--------+
由 3 个值组成的简单序列。
我正在使用 SQL Server 2012
最佳答案
这对于评论来说有点太长了。
但是,如果你想添加列 groups
,你可以这样做:
select 1 + ((id - 1) / 3) as groups
如果 id
值可能有漏洞,请改用 row_number()
:
select 1 + (row_number() over (order by id) - 1) / 3 as groups
SQL Server 进行整数除法,因此它会按照您指定的方式分配值。
关于sql - 减少聚合的数据库行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32310102/