2016-08-10 1 views
0
select t.col1 a, t.col1+...+t.coln-1 b, t.col1+...+t.coln-1+t.coln c 
from table 

Может ли прямое использование b+t.col3?SQL: Как сумма каждого столбца в оракуле?

я могу думать:

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 

Есть еще один способ сделать это.

+0

А? Почему вы ищете другой способ? Это какой-то вопрос интервью или есть реальная причина искать другой способ? – sstan

+0

Ваш второй способ будет работать, но он будет очень неэффективным, так как он дважды сканирует таблицу и требует соединения. Вы ищете способы сделать это еще хуже? Напишите его в цикле в процедуре, поэтому каждая строка обрабатывается по одному. Вы хотите сделать его более эффективным? Используйте первый способ, который вы показали, который является наиболее эффективным - он только сканирует таблицу один раз, и нет объединений. – mathguy

+0

Это так, когда-то слишком длинный b (более 100 символов), мне нужно позвонить, когда нужно написать еще одно время. Читайте инструкцию SQL, которую трудно прочитать. – zhanzezhu

ответ

3

Я думаю, вы также можете сделать это таким образом.

select a, b, b+col3 
from (
select t.col1 a, t.col1+t.col2 b, t.col3 
from t) 
+0

Вы ошибаетесь, и, думая так, вы очень мало знаете о SQL. (И поэтому вы не должны публиковать ответы, не проверяя их в первую очередь, а когда ваши ответы верны несколько раз, вы можете начать отвечать непроверенными решениями.) Определенное понижение. – mathguy

+0

@mathguy - можете ли вы объяснить без покровительственного тона, что не так с этим ответом. Я немного разбираюсь в sql, и, если я не пропущу что-то тонкое, это выглядит хорошо для меня. – DaveRlz

+0

@DaveRlz - ** Извините ** - в этом решении нет ничего плохого, и мой downvote теперь удален. Я идиот - я отреагировал, не прочитав полного решения, и мне показалось (неправильно), что Хасан сделал ту же ошибку, что и OP: используя имя, которое он определил в SELECT, для другого выражения в том же SELECT. Очевидно, он этого не делал, его решение правильное. Хасан: Приносим извинения, я был неправ и несправедлив! – mathguy

0

Я думаю, что это должно работать:

SELECT SUM(t.COL1) a, SUM(t.COL1 + t.COL2) b, SUM(t.COL1 + t.COL2 + t.COL3) c 
FROM TABLE1 t 

Как mathguy упомянуто ниже, вы не хотите, чтобы суммировать столбцы и добавить итоги, это было не так ясно для меня, но теперь это имеет смысл:)

SELECT t.COL1 a, t.COL1 + t.COL2 b, t.COL1 + t.COL2 + t.COL3 c 
FROM TABLE1 t 

даст вам правильные значения.

+0

Нет указаний на то, что OP хотел рассчитать итоговые значения столбцов - он только хочет добавить значения в каждую строку отдельно. – mathguy

+0

@mathguy - вопрос озаглавлен «SQL: как сумма каждого столбца в оракуле», который, похоже, указывает намерение, действительно ли это то, что на самом деле требуется, - это другое дело. – DaveRlz

+0

@DaveRlz - да, я тоже так думал, когда читал заголовок, тогда я прочитал реальный вопрос и понял, что OP хотел добавить по столбцам, а не по столбцам. Вот что я пытался сообщить об этом ответчику здесь, с моим комментарием выше. Я имел в виду это объяснение, а не критику, я надеюсь, что это не получилось. – mathguy

Смежные вопросы