任何人都可以帮助我解决以下csum功能。 每种情况下的输出结果是什么。 CSUM(1,1), csum(1,1)+ emp_no CSUM(1,EMP_NO)+ EMP_NO
答案 0 :(得分:3)
CSUM是15年前V2R3的旧功能。它总是可以使用更新的符合标准SQL的语法重写。
CSUM(1,1)返回与 ROW_NUMBER()OVER(ORDER BY 1)相同的序列,序列以1开头。 但是你永远不应该这样使用它,因为Windowed Aggregate Function中的ORDER BY 1与SELECT的最终ORDER BY 1不同,它按相同的值排序所有行1. Teradata基于它来并行计算这些函数。 PARTITION BY和ORDER BY中的值,这意味着在单个AMP上处理具有相同PARTITION / ORDER数据的所有行,如果只有一个值,则AMP将处理所有行,从而导致完全偏斜的分布。
除了ORDER BY 1之外,您应该使用在最佳情况下或多或少是唯一的列。
csum(1,emp_no)+ emp_no 可能与另一个SELECT一起使用以获取列的当前最大值并向其添加新的顺序值,即创建自己的无间隙序列号。
这是最好的方法:
SELECT ROW_NUMBER() OVER (ORDER BY column(s)_with_a_low_number_of_rows_per_value)
+ COALESCE((SELECT MAX(seqnum) FROM table),0)
,....
FROM table