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