@beginer123

Sql просуммировать значения в 100 колонках?

Есть колонки с цифрами
column1,column2,column3...........,column100
Нужно посчитать сумму всех 100 колонок
Естественно писать
select column1+column2+column3+....+column100 не вариант
Какой есть способ это сделать(в цикле там или еще как то)
Использую Sqlite
  • Вопрос задан
  • 1185 просмотров
Пригласить эксперта
Ответы на вопрос 4
Alex_Wells
@Alex_Wells
PHP/Kotlin
Просто:
SELECT SUM(column1)+SUM(column2)+SUM(column3)+SUM(column4)+..+SUM(column100) AS total FROM table


А сам SQL запрос собирать каким-то билдером либо на крайняк string builder'ом. Думаю с этим проблем не будет.
Ответ написан
Комментировать
2ord
@2ord
Просто немыслимая какая-то структура БД... Не буду спрашивать зачем.
Можно программно составить запрос SQL, как пример ниже на языке Ruby,
select_clause = ""
for i in (1..99) do
  select_clause += "column" + i.to_s + "+"  # i.to_s конвертирует число в строковое представление
end
select_clause += "column100"
sql_statement = "SELECT " + select_clause + " FROM table_name"
Ответ написан
igruschkafox
@igruschkafox
Специалист по сопровождению БД MS SQL
поддерживаю что структура БД немыслимая

но я бы сделал вычисляемый столбец с сохраненным значением
Ответ написан
Комментировать
@rll
Без использования языков программирования, чисто средствами коммандной строки SQLITE можно сделать так:

Допустим это исходные данные (примерно как у автора запроса?):
CREATE TABLE if not exists mytable (id integer, column1 integer, column2 integer, column3 integer);
insert into mytable values (1, 54, 88, 99);
insert into mytable values (2, 22, 12, 778);
insert into mytable values (3, 0, 123, 88);
insert into mytable values (4, 7, 42, 35);
insert into mytable values (5, 5, 47, 23);


Тогда сумму колонок можно получить так:
create table if not exists temp(a text, b text, c text, d text, e text, f text);

.out temp.txt
pragma table_info('mytable');
.out stdout

.import temp.txt temp

.out temp.txt
select 'select ' || group_concat(b, '+') || ' as resultColumn from mytable;' from temp where b like 'column%';
.out stdout
drop table temp;

.read temp.txt


Команды можно подсунуть в SQLITE в виде скрипта, тогда даже и набирать их не надо.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы