首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >sqlite sum()到nsinteger

sqlite sum()到nsinteger
EN

Stack Overflow用户
提问于 2012-08-31 06:35:05
回答 2查看 697关注 0票数 1

我想构建一个函数,该函数取一个名为hours的列中所有行的总和。然后它应该返回一个整数值,我将用它与另一个数字相乘。

代码语言:javascript
复制
-(NSInteger)calculateTotal{

FMDatabase *dbHandler = [FMDatabase databaseWithPath:[Utility getDatabasePath]];

[dbHander open];

FMResultSet *results = [dbHandler executeQuery:@"SELECT SUM(hours) FROM inputs"];

NSInteger totalHours;
while ([results next]) {
    totalHours = [results intForColumn:@"hours"];
}

return totalHours;
}

但是它不起作用,它返回0,并且它附带一个警告,指出没有名为“小时”的列。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-08-31 09:09:29

我认为大多数数据库引擎都会将查询结果中的列命名为最外层的聚合函数-- SUM

尝试将您的查询更改为SELECT SUM(hours) AS hours FROM inputs。(或者,如果您正在查询Oracle,您这个倒霉的人,查询没有AS。)

票数 0
EN

Stack Overflow用户

发布于 2012-08-31 13:46:10

以下代码将起作用:

代码语言:javascript
复制
-(NSInteger)calculateTotal
{
  FMDatabase *dbHandler = [FMDatabase databaseWithPath:[Utility getDatabasePath]];

  if(![dbHander open])
  {
        NSLog(@"Could not open DB, try again");
        return -1; //return some value that tells you that there was an error
  }

  FMResultSet *results = [dbHandler executeQuery:@"SELECT SUM(hours) AS sum_hours FROM inputs"];

  NSInteger totalHours = -1;
  while ([results next]) {
      totalHours = [results intForColumn:@"sum_hours"];
  }

  [results close];
  [dbHandler close];
  return totalHours;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12206551

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档