Применение оценки к объекту в таблице с использованием SQL и Python - PullRequest
0 голосов
/ 26 марта 2012

Попытка написать функцию, чтобы увидеть, как часто объект существует и дать ему +1 в зависимости от того, сколько раз он существует.

Использование базы данных sqlite и python.

select distinct Date, Name from history order by Date Desc

Вернется:

Date        Name
2012-25-03     a
2012-25-03     b
2012-25-03     c
2012-25-03     d
2012-24-03     b
2012-24-03     c
2012-24-03     d
2012-24-03     e
2012-23-03     c
2012-23-03     d
2012-23-03     e
2012-23-03     f

В основном, для достижения следующих целей в Python или SQL:

a = 1
b = 2
c = 3
d = 3
e = 2
f = 1

Я пробовал несколько разных подходов в python, используя итераторы и подзапросы, но не увенчался успехом, может быть, это можно / нужно сделать, это sql.

Цените время каждого!

Ответы [ 3 ]

2 голосов
/ 26 марта 2012

Это легко в SQL.Вам просто нужно использовать функцию агрегирования COUNT.

SELECT `Name`, COUNT(*) FROM `history` GROUP BY `Name`;
0 голосов
/ 26 марта 2012
SELECT Name
     , COUNT(*) AS cnt
FROM history 
GROUP BY Name
ORDER BY Name

Если есть вероятность, что у вас более одной строки с одинаковыми Date и Name, и вы не хотите вдвойне считать эти строки, измените COUNT(*) на:

     , COUNT(DISTINCT Date) AS cnt

(обновление) Если ваша версия SQLite не поддерживает COUNT(DISTINCT column), вы можете использовать подзапрос в этом случае:

SELECT Name
     , COUNT(*) AS cnt
FROM 
    ( SELECT DISTINCT
          Name, Date
      FROM history 
    ) AS h 
GROUP BY Name
ORDER BY Name
0 голосов
/ 26 марта 2012

Почему бы просто не использовать функцию count в sql?Это код псевдо ...

counts = 
result = <query_function>("select distinct Name from history")
for result in results:
    result2 = <query_function>("select count(*) from history where Name LIKE ?", result.Name)
    counts[result.Name] = result2

for key,value in counts.iteritems():
    print '%s = %d' % (key,value)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...