使用SQL和Python对表中的对象应用分数

使用SQL和Python对表中的对象应用分数,python,sql,sqlite,Python,Sql,Sqlite,尝试编写一个函数来查看对象存在的频率,并根据其存在的次数为+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

尝试编写一个函数来查看对象存在的频率,并根据其存在的次数为+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来完成


感谢大家的时间

为什么不在sql中使用count函数呢?这是psuedo代码

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)
计数=
结果=(“从历史记录中选择不同的名称”)
对于结果中的结果:
result2=(“从历史记录中选择count(*),名称类似于?”,result.Name)
计数[结果.名称]=结果2
对于键,计数中的值。iteritems()
打印“%s=%d%”(键,值)
如果您可能有多行具有相同的
日期
名称
,并且您不想对这些行进行双重计数,请将
计数(*)
更改为:

     , COUNT(DISTINCT Date) AS cnt

(更新)如果您的SQLite版本不支持计数(独立列),则在这种情况下可以使用子查询:

SELECT Name
     , COUNT(*) AS cnt
FROM 
    ( SELECT DISTINCT
          Name, Date
      FROM history 
    ) AS h 
GROUP BY Name
ORDER BY Name

这在SQL中很简单。您只需要使用
COUNT
聚合函数

SELECT `Name`, COUNT(*) FROM `history` GROUP BY `Name`;

这肯定是最糟糕的方法。我知道这很糟糕,并且会导致大量的数据库查询(可能是荒谬的),但我试图演示逻辑,而不是最优化的答案。感谢您的帮助,这很完美。
SELECT `Name`, COUNT(*) FROM `history` GROUP BY `Name`;