我正在尝试从表中的表中执行select count(*)
,但由于此错误,我无法执行此操作。我不知道表中的行数。
除此之外,我在查询中没有进行任何其他聚合。
我想这与计数值有关,计数值太大而无法存储在INTEGER中。
有什么替代方案?
答案 0 :(得分:5)
当你的会话在Teradata模式下运行时,COUNT的结果就像你已经注意到的那样是INTEGER(在ANSI模式下,它将是一个至少有15位数的DECIMAL)。
解决方法很简单,将其转换为bigint:
SELECT CAST(COUNT(*) AS BIGINT)...
答案 1 :(得分:1)
这是Teradata 2616的#2 Google热门,所以我想添加一些内容。如果你得到2616"发生数字溢出"从Teradata的SUM中,解决方案是CAST,然后是SUM。 CAST必须在SUM中:
选择 SUM(CAST(WHATEVER_QTY AS DECIMAL(38,0))) 从 TER_DATABASE.WHATEVER_TABLE;
在我的情况下,DECIMAL(38,0)工作,但BIGINT是2616.欢迎您进行实验。这是info.teradata的链接: