SQLite: пакетная агрегация со вставкой - PullRequest
1 голос
/ 30 апреля 2019

Я бы хотел сделать следующее:

cur.execute("SELECT key, SUM(val) FROM table GROUP BY key")

cur.executemany("INSERT INTO table_sums VALUES(?,?)",(row for row in cur))

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

Очевидно, я сейчас использую Python, но, поскольку я прошу одно утверждение (если оно существует), я не думаю, что это должно иметь значение. Если он не существует, возможно, есть эффективный (!) Обходной путь в Python?

РЕДАКТИРОВАТЬ: Чтобы избежать запроса SELECT WHERE, на самом деле было бы желательно не создавать полные суммы для поднабора ключей, а просто суммировать по первым n строкам и сохранять результирующие итоги, затем переходите к следующему n ...

1 Ответ

2 голосов
/ 30 апреля 2019

Два SQL можно объединить в один, используя временное представление .

WITH tempsums as 
(SELECT key,sum(value) from table 
GROUP by key
where key in :batch)
INSERT INTO total_sums SELECT * from tempsums)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...