Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL:oracle中每列的总和是多少?_Sql_Oracle - Fatal编程技术网

SQL:oracle中每列的总和是多少?

SQL:oracle中每列的总和是多少?,sql,oracle,Sql,Oracle,可以直接使用b+t.col3 我能想到: select t.col1 a, t.col1+...+t.coln-1 b, t.col1+...+t.coln-1+t.coln c from table 还有别的办法吗 我想你也可以这样做 with t1 as (select col1+...+coln-1 b from table) select t2.col1 a, t1.b, t1.b+t2.coln c from table t2 inner join t1 on t1.id=t2.id

可以直接使用
b+t.col3

我能想到:

select t.col1 a, t.col1+...+t.coln-1 b, t.col1+...+t.coln-1+t.coln c
from table

还有别的办法吗

我想你也可以这样做

with t1 as (select col1+...+coln-1 b from table)
select t2.col1 a, t1.b, t1.b+t2.coln c
from table t2
inner join t1 on t1.id=t2.id

我想你也可以这样做

with t1 as (select col1+...+coln-1 b from table)
select t2.col1 a, t1.b, t1.b+t2.coln c
from table t2
inner join t1 on t1.id=t2.id

我认为这应该奏效:

select a, b, b+col3
from (
select t.col1 a, t.col1+t.col2 b, t.col3
from t)
正如mathguy在下面提到的,您不想对列求和并添加总计,这对我来说不是很清楚,但现在有了意义:)


将为您提供正确的值。

我认为这应该有效:

select a, b, b+col3
from (
select t.col1 a, t.col1+t.col2 b, t.col3
from t)
正如mathguy在下面提到的,您不想对列求和并添加总计,这对我来说不是很清楚,但现在有了意义:)



将为您提供正确的值。

嗯?你为什么要寻找另一种方式?这是某种面试问题,还是寻找其他方法的真正原因?第二种方法可行,但效率很低,因为它会扫描表两次并要求加入。你在想办法让事情变得更糟吗?将其写入过程中的循环中,以便每行一次处理一个。你想让它更有效率吗?使用您展示的第一种方法,这是最有效的-它只扫描表一次,并且没有连接。就是这样,有时b太长(超过100个字符),我需要在需要再次写入时调用。导致SQL语句难以读取。是吗?你为什么要寻找另一种方式?这是某种面试问题,还是寻找其他方法的真正原因?第二种方法可行,但效率很低,因为它会扫描表两次并要求加入。你在想办法让事情变得更糟吗?将其写入过程中的循环中,以便每行一次处理一个。你想让它更有效率吗?使用您演示的第一种方式,这是最有效的—它只扫描表一次,并且没有连接。就是这样,有时b太长(超过100个字符),我需要在需要再次写入时调用。导致SQL语句难以读取。您认为错误,这样认为表明您对SQL知之甚少。(因此,你不应该在没有先测试答案的情况下发布答案;当你的答案正确几次后,你就可以开始用未经测试的答案进行回答。)明确的否决票。@mathguy-你能解释一下这个答案有什么错吗,没有一种傲慢的语气。我对sql有一点了解,除非我遗漏了一些微妙的东西,否则我觉得这没问题。@DaveRlz-对不起-这个解决方案没有问题,我的反对票现在被删除了。我是一个白痴——我没有阅读完整的解决方案就做出了反应,在我看来,哈桑犯了与OP相同的错误(错误):使用他在SELECT中定义的名称作为同一SELECT中的另一个表达式。显然他没有那样做,他的解决方案是正确的。哈桑:对不起,我错了,不公平!。。。或者说,这个解决方案实际上有些“错误”,但与我在前面的评论中的反对意见无关。错误的是,它在不需要子查询时使用子查询(选择col1、col1+col2、col1+col2+col3应该更有效)。尽管优化器可能能够“看到”这一点并以这种方式重写查询。无论如何,我的第一个评论是100%错误的。我过去只使用过这种技巧。对于更复杂的情况,“col1”实际上是一个200个字符长的表达式,col2也是,col3也是,等等,它工作得很好。不幸的是,Oracle不允许在其他列中引用列别名,因为它尊重“不要重复自己”的原则,从而提高了代码的可读性和健壮性。您的想法是错误的,这样的想法表明您对SQL知之甚少。(因此,你不应该在没有先测试答案的情况下发布答案;当你的答案正确几次后,你就可以开始用未经测试的答案进行回答。)明确的否决票。@mathguy-你能解释一下这个答案有什么错吗,没有一种傲慢的语气。我对sql有一点了解,除非我遗漏了一些微妙的东西,否则我觉得这没问题。@DaveRlz-对不起-这个解决方案没有问题,我的反对票现在被删除了。我是一个白痴——我没有阅读完整的解决方案就做出了反应,在我看来,哈桑犯了与OP相同的错误(错误):使用他在SELECT中定义的名称作为同一SELECT中的另一个表达式。显然他没有那样做,他的解决方案是正确的。哈桑:对不起,我错了,不公平!。。。或者说,这个解决方案实际上有些“错误”,但与我在前面的评论中的反对意见无关。错误的是,它在不需要子查询时使用子查询(选择col1、col1+col2、col1+col2+col3应该更有效)。尽管优化器可能能够“看到”这一点并以这种方式重写查询。无论如何,我的第一个评论是100%错误的。我过去只使用过这种技巧。对于更复杂的情况,“col1”实际上是一个200个字符长的表达式,col2也是,col3也是,等等,它工作得很好。不幸的是,Oracle不允许在其他列中引用列别名,因为这将通过遵守“不要重复自己”的原则来提高代码的可读性和健壮性。没有迹象表明OP想要计算列总数-他只是希望在每行中添加值,单独地。@mathguy-问题的标题是“SQL:oracle中每列的总和”-这似乎表明了一种意图,不管它是否是实际需要的,这是另一回事。@DaveRlz-是的,当我读标题时我也这么认为,然后我读了实际问题,意识到OP想要跨列添加,而不是向下列添加。这就是我试图与这里的回复者沟通的内容,上面是我的评论。我的意思是作为一种解释,而不是批评,我希望它没有被误解。没有迹象表明OP想要计算列总数-他说