【问题标题】:Group and sum several records using Core Data使用 Core Data 对多条记录进行分组和汇总
【发布时间】:2011-02-28 14:14:42
【问题描述】:

我正在寻找一种有效的方法来做到这一点。我有一个具有 2 个属性的实体:isPrivate 和点。 isPrivate 可能具有以下两个值之一:y 或 n。点数,-200 到 200 范围内的数字。

我需要按以下方式对分数进行分组:

-200 to 0: 340pts
0 to 100: 231pts
100 to 200: 987pts.

我目前正在运行一个谓词来获取记录,我需要的每个范围都有一个:

 ...
 NSPredicate *predicate = [NSPredicate predicateWithFormat:@"isPrivate = %y"];
 ...
 NSArray *ks = [[NSArray alloc] initWithArray:[context executeFetchRequest:fetchRequest error:&error]];
 NSNumber *t = [ks valueForKeyPath:@"@sum.points"];
 ...

它有效,但我正在寻找更好的方法。

首先,按照我的做法,我将记录加载到内存中,然后加载到 NSArray 中。如果我能避免这种情况,那就完美了 其次,如果我能一步到位,可能会更好。

对此的完美解决方案是在单个谓词中对记录进行分组和求和,不要将记录加载到内存中,只获取总和,而不是所有数据。

tks.

【问题讨论】:

  • 您将 CoreData 视为数据库。这是您问题的根本缺陷。 CoreData 不是 数据库。它是一个对象图管理系统。它可能在下面使用 SQLite 数据库,但这是一个实现细节。 CoreData 在更高的抽象级别上工作。
  • 这可能也有帮助 stackoverflow.com/q/12637611/1224741

标签: iphone objective-c core-data group-by sum


【解决方案1】:

我想你想fetch specific values using an NSExpression.

这允许仅检索与特定属性关联的值。然后,使用集合运算符,您可以快速找到 sum、count、min、max 等。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-03-23
    • 1970-01-01
    • 2017-05-31
    • 2019-02-10
    • 1970-01-01
    • 2022-01-20
    • 2019-06-18
    • 1970-01-01
    相关资源
    最近更新 更多