python sqlite3 сумма каждого типа - PullRequest
0 голосов
/ 17 ноября 2011

У меня есть таблица (foos), которая представляет собой список Foos, по одной строке на тип Foo.Вторая таблица (элементы) - это список, в котором в каждой строке указан тип Foo и сумма (и другая информация).Например, Foo3, 45.2 и Foo2, 12.34.

Я бы хотел определить сумму сумм для каждого типа Foo.

Это мой существующий код, но он должен бытьлучший (более стандартный или эффективный) способ:

cursor.execute('''select type from foos''')
foo_types = cursor.fetchall()
results = []
for ft in foo_types:
    cursor.execute('''select sum(amount) from items
        where foo_type =?''', ft)
    results.append((ft, cursor.fetchone()))

Как мне это кодировать?

1 Ответ

3 голосов
/ 17 ноября 2011
SELECT foo_type, SUM(amount)
FROM items
GROUP BY foo_type

дает вам в одном запросе уже каждый foo_type и соответствующий sum. Из него можно построить словарь и использовать его для расширения данных из первого запроса.

Или поместите все в один запрос:

cursor.execute("SELECT foo_type, SUM(amount) "
               "FROM items, foos "
               "WHERE items.foo_type = foos.type "
               "GROUP BY foo_type")
results = list(cursor)

# results is a list of tuples: [(type1, sum1), (type2, sum2), ...]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...