Как добавить итоговый столбец в SQLite - PullRequest
1 голос
/ 04 февраля 2012

Я пытаюсь выполнить некоторый анализ данных о продажах с использованием SQLite.

На данный момент в моей таблице есть несколько столбцов, включая unique transaction ID, product name, quantity of that product и value of that product.Для каждой транзакции может быть несколько записей, поскольку каждый отдельный тип продукта в корзине имеет свою запись.

Я хотел бы добавить в таблицу два новых столбца.Первым будет total for each transaction ID, который суммирует общее количество всех продуктов в этой корзине.

Я понимаю, что в таблице будет дублирование, поскольку все идентификаторы повторных транзакций будут иметь общую сумму.Второй был бы похожим, но в стоимостном выражении.

К сожалению, я не могу сделать это, создав новую таблицу со значениями, которые я хочу вычислить в Excel, и затем присоединив ее к исходной таблице, потому что их слишком много.записи для Excel.

Есть ли способ заставить SQL сделать эквивалент sumif в Excel?

Я думал что-то вроде:

select sum(qty) where uniqID = ...

Но я озадачен тем, как выразить необходимость суммирования всех величин, для которых uniqID совпадает с той, что указана в этой записи.

1 Ответ

2 голосов
/ 05 февраля 2012

Вы не создали бы такой столбец в SQL.Вы бы просто запросили сумму на лету.Если вам действительно нужен табличный объект, вы можете создать представление, содержащее 2 столбца;uniqID и сумма для этого идентификатора.

Давайте установим несколько фиктивных данных в таблицу;столбец a - это ваш уникальный идентификатор, b - значения, которые вы суммируете.

create table tab1 (a int, b int);
insert into tab1 values (1,1);
insert into tab1 values (1,2);
insert into tab1 values (2,10);
insert into tab1 values (2,20); 

Теперь вы можете выполнять простые запросы для отдельных уникальных идентификаторов, например:

select sum(b) from tab1 where a = 2;
30

или сумму для всех уникальных идентификаторов.(предложение group by может быть всем, что вы нащупываете :):

select a, sum(b) from tab1 group by a;
1|3
2|30

Который можно обернуть как представление:

create view totals as select a, sum(b) from tab1 group by a;
select * from totals;
1|3
2|30

Представление будет обновлено наfly:

insert into tab1 values (2,30);
select * from totals;
1|3
2|60

В дальнейших запросах для анализа вы можете использовать «итоги» так же, как и таблицу.

...