【问题标题】:How to count the values of rows in a database如何计算数据库中行的值
【发布时间】:2015-01-03 16:14:23
【问题描述】:

我正在编写我的 python 脚本,因为我想创建变量来依靠值来找出我在数据库中有多少 69 行,然后依靠这些值来找出有多少值我必须创建一个值。

例如:当我连接数据库并选择一个频道时,我想获取以1开头的行值,然后添加69使其成为70。添加另一个69 来生成139,添加另一个69 来生成208 等等,我想每次都继续添加,直到我得到数据库中的最后69 行。然后我想计算每个值我做了多少个值来获得单个值。

例子:

>> 1
>> 70
>> 139
>> 208
>> 277
>> 346
>> 415
>> 484
>> 553
>> 622

我指望这些值 1, 70, 139 208, 277, 346, 415, 484, 553 和 @987654333一共10个。那是因为我有值1,这是我得到的一个值,我有值70,这是我得到的两个值等等。

代码如下:

#get the programs list
cur = con.cursor()
cur.execute('SELECT channel FROM programs')
programs = cur.fetchall()
start_pos = 375    # indent for first program
channels_index =  69 + 1   # count how many rows I have got in a database

我想计算 69 行来生成一个值,因为我有 69 行存储在数据库中的每个数据。

这是我的数据库的示例:

ABC FAMILY
ABC FAMILY
ABC FAMILY
ABC FAMILY
ABC FAMILY
ABC FAMILY
ABC FAMILY
ABC FAMILY
ABC FAMILY
ABC FAMILY
...etc until 69
CBS
CBS
CBS
CBS
CBS
CBS
CBS
CBS
CBS
CBS
...etc until 69

编辑:这是来自数据库的频道列表:

18:29:44 T:5836  NOTICE: [(u'101 ABC FAMILY ',), (u'101 ABC FAMILY ',), 
(u'101 ABC FAMILY ',), (u'101 ABC FAMILY ',), (u'101 ABC FAMILY ',), 
(u'101 ABC FAMILY ',), (u'101 ABC FAMILY ',), (u'101 ABC FAMILY ',), 
(u'101 ABC FAMILY ',), (u'101 ABC FAMILY ',), (u'101 ABC FAMILY ',), 
(u'101 ABC FAMILY ',), (u'101 ABC FAMILY ',), (u'101 ABC FAMILY ',), 
(u'101 ABC FAMILY ',), (u'101 ABC FAMILY ',), (u'101 ABC FAMILY ',), 
(u'101 ABC FAMILY ',), (u'101 ABC FAMILY ',), (u'101 ABC FAMILY ',), 
(u'101 ABC FAMILY ',), (u'101 ABC FAMILY ',), (u'101 ABC FAMILY ',), 
(u'101 ABC FAMILY ',), (u'101 ABC FAMILY ',), (u'101 ABC FAMILY ',), 
(u'101 ABC FAMILY ',), (u'101 ABC FAMILY ',), (u'101 ABC FAMILY ',), 
(u'101 ABC FAMILY ',), (u'101 ABC FAMILY ',), (u'101 ABC FAMILY ',), 
(u'101 ABC FAMILY ',), (u'101 ABC FAMILY ',), (u'101 ABC FAMILY ',), 
(u'101 ABC FAMILY ',), (u'101 ABC FAMILY ',), (u'101 ABC FAMILY ',), 
(u'101 ABC FAMILY ',), (u'101 ABC FAMILY ',), (u'101 ABC FAMILY ',), 
(u'101 ABC FAMILY ',), (u'101 ABC FAMILY ',), (u'101 ABC FAMILY ',), 
(u'101 ABC FAMILY ',), (u'101 ABC FAMILY ',), (u'101 ABC FAMILY ',), 
(u'101 ABC FAMILY ',), (u'101 ABC FAMILY ',), (u'101 ABC FAMILY ',), 
(u'101 ABC FAMILY ',), (u'101 ABC FAMILY ',), (u'101 ABC FAMILY ',), 
(u'101 ABC FAMILY ',), (u'101 ABC FAMILY ',), (u'101 ABC FAMILY ',), 
(u'101 ABC FAMILY ',), (u'101 ABC FAMILY ',), (u'101 ABC FAMILY ',), 
(u'101 ABC FAMILY ',), (u'101 ABC FAMILY ',), (u'101 ABC FAMILY ',), 
(u'101 ABC FAMILY ',), (u'101 ABC FAMILY ',), (u'101 ABC FAMILY ',), 
(u'101 ABC FAMILY ',), (u'101 ABC FAMILY ',), (u'101 ABC FAMILY ',), 
(u'101 ABC FAMILY ',), (u'102 CBS ',), (u'102 CBS ',), (u'102 CBS ',), 
(u'102 CBS ',), (u'102 CBS ',), (u'102 CBS ',), (u'102 CBS ',), (u'102 CBS ',), 
(u'102 CBS ',), (u'102 CBS ',), (u'102 CBS ',), (u'102 CBS ',), (u'102 CBS ',), 
(u'102 CBS ',), (u'102 CBS ',), (u'102 CBS ',), (u'102 CBS ',), (u'102 CBS ',), 
(u'102 CBS ',), (u'102 CBS ',), (u'102 CBS ',), (u'102 CBS ',), (u'102 CBS ',), 
(u'102 CBS ',), (u'102 CBS ',), (u'102 CBS ',), (u'102 CBS ',), (u'102 CBS ',), 
(u'102 CBS ',), (u'102 CBS ',), (u'102 CBS ',), (u'102 CBS ',), (u'102 CBS ',), 
(u'102 CBS ',), (u'102 CBS ',), (u'102 CBS ',), (u'102 CBS ',), (u'102 CBS ',), 
(u'102 CBS ',), (u'102 CBS ',), (u'102 CBS ',), (u'102 CBS ',), (u'102 CBS ',), 
(u'102 CBS ',), (u'102 CBS ',), (u'102 CBS ',), (u'102 CBS ',), (u'102 CBS ',), 
(u'102 CBS ',), (u'102 CBS ',), (u'102 CBS ',), (u'102 CBS ',), (u'102 CBS ',), 
(u'102 CBS ',), (u'102 CBS ',), (u'102 CBS ',), (u'102 CBS ',), (u'102 CBS ',), 
(u'102 CBS ',), (u'102 CBS ',), (u'102 CBS ',), (u'102 CBS ',), (u'102 CBS ',), 
(u'102 CBS ',), (u'102 CBS ',), (u'102 CBS ',), (u'102 CBS ',), (u'102 CBS ',), 
(u'102 CBS ')]

结果如下:

 <<<<<<<< the value `1` is missing
19:43:08 T:6208  NOTICE: 70
19:43:08 T:6208  NOTICE: 139
19:43:08 T:6208  NOTICE: 208
19:43:08 T:6208  NOTICE: 277
19:43:08 T:6208  NOTICE: 346
19:43:08 T:6208  NOTICE: 415
19:43:08 T:6208  NOTICE: 484
19:43:08 T:6208  NOTICE: 553
19:43:08 T:6208  NOTICE: 622
19:43:08 T:6208  NOTICE: 691
19:43:08 T:6208  NOTICE: 760
19:43:08 T:6208  NOTICE: 829
19:43:08 T:6208  NOTICE: 898
19:43:08 T:6208  NOTICE: 967
19:43:08 T:6208  NOTICE: 1036
19:43:08 T:6208  NOTICE: 1105 <<<<<<<< not needed

你能帮我计算一下数据库中从第 1 行开始的行,然后每次加起来 69,直到我得到数据库中的最后 69 行,然后计算我必须计算多少个值做一个单一的值?

【问题讨论】:

  • 年轻的时候,我定义了一个有表和列的数据库。什么是表格,什么是列,您的 值 与所有这些有什么关系?
  • @SergeBallesta 表的名称称为程序,列称为通道。我在数据库中有 1104 行,但它是随机的,因为它取决于我在数据库中存储的行数。
  • @SergeBallesta 你知道吗?
  • @Rob 我认为您的目标没有明确说明。你能提供一个你想要的输出的例子吗?
  • @Rob 你想对每个频道进行计数,对吗?如果是这种情况,请添加它的样子。

标签: python python-2.7 sqlite


【解决方案1】:

如果可以避免的话,您应该从不从表中获取所有数据,然后在 Python 中对其进行迭代。使用 SQL 聚合。它会快得多。

例如:

#Initialize a running total. For some reason you asked to initialize it to one, but note that that will give you a final total that is 1 greater than the number of 
running_total = 1
#Query will select the sum of
query = "SELECT Channel, COUNT(*) AS number_of_programs FROM Programs GROUP BY Channel"
cursor = con.cursor()
cursor.execute(query)
for result in cursor.fetchall():
    print running_total
    #Add the number of programs for the channel to your running total. You access it as the second element of the returned record, because we selected number_of_programs second in our query.
    print 'Channel {0} has {1} programs. Current program count is {2}'.format(result[0],result[1],running_total)
    running_total += result[1] 

当然,如果你真的知道每个频道正好有 69 个节目,你可以直接写。

query = "SELECT COUNT(*) FROM programs"
cursor.execute(query)
x = cursor.fetchone()[0]
running_total = 1 #Again, you want to start counting at 1 for some reason
while running_total < x:
    running_total += 69
    print running_total

但我认为这不是你想要的。

【讨论】:

  • 非常感谢您,因为您几乎是正确的,但很少有错误的地方。在代码中,它给我的结果是缺少一个输出值1,并且不需要输出值1105,因为它是数据库末尾的最后一行。我想获取以1开头的值,然后每次添加69,直到它到达数据库末尾的最后一个值,例如:1036。请在我更新的问题中查看我已将输出结果与丢失的结果和不需要的最后一个输出值放在一起。
  • 我在等你的答复。
  • 你究竟为什么想要得到这个结果?如果我们对您想如何处理这些信息有所了解,那么回答这个问题会容易得多?这是家庭作业吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-08
  • 1970-01-01
  • 2020-12-11
  • 2013-03-16
相关资源
最近更新 更多