2011-11-17 2 views
0

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

Я хотел бы определить общее количество сумм для каждого типа 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

SO-й подсветка синтаксиса говорит мне, что есть проблема с вашим кодом. – eumiro

+0

Я положил дополнительный '' 'в конце строки выполнения. Исправлена. – foosion

ответ

2
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), ...] 
+0

элементов и foo оба используют имя столбца 'type'. Когда я запускаю вторую версию, я получаю: sqlite3.OperationalError: неоднозначное имя столбца: type в группе по строке. Я попробовал группу по items.type, но это не помогло. Первая версия отлично работала – foosion

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