Coredata groupby 属性 iOS
Posted
技术标签:
【中文标题】Coredata groupby 属性 iOS【英文标题】:Coredata groupby properties iOS 【发布时间】:2015-08-23 17:17:42 【问题描述】:我想在ios
CoreData
中实现一个SQL
查询,这是我的查询。
Select * from table group by my_field1 order by my_field2
我想显示属性my_field1
的GroupBy
,但我收到默认值不能为零的错误。
这是我的代码:
NSManagedObjectContext *managedObjectContext = [self managedObjectContext];
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] initWithEntityName:@"myentity"];
[fetchRequest setResultType:NSDictionaryResultType];
fetchRequest.propertiesToGroupBy = [NSArray arrayWithObject:@"my_field1"];
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"my_field2" ascending:YES];
[fetchRequest setSortDescriptors:[NSArray arrayWithObject:sortDescriptor]];
NSMutableArray *data = [[managedObjectContext executeFetchRequest:fetchRequest error:nil] mutableCopy];
如何在 Coredata 中按 Group by 属性过滤结果。
我想要的结果是:
我的表格数据:
my_field1 | my_field2 | my_field3
1 ABC DEF
1 GHI JKL
1 MNO PQR
2 DEF DEF
我的预期结果:
my_field1 | my_field2 | my_field3
1 MNO PQR
2 DEF DEF
我期待为 my_field1
找到最后一行,因为我也在查询中包含 order_by。
【问题讨论】:
你想获得 values "1", "MNO" and "PQR" (and "2", "DEF" and "DEF"), 还是做你想要具有这些值的 NSManagedObjects 吗? 【参考方案1】:您必须将您选择的其他字段添加到propertiesToGroupBy
数组中。否则,它怎么知道如何处理其他领域?例如,假设您有以下数据:
my_field_1 my_field_2
John Smith
John Jones
如果您仅按 my_field_1 进行分组,则会导致:
my_field_1 my_field_2
John ??????
在此示例中,您还需要按 my_field_2 分组或应用一些聚合函数。
在您的示例中,您选择了表中的所有字段,因此可能有许多字段需要分组,使用计数/总和/等进行聚合,或者通过将它们添加到 fetchRequest.propertiesToFetch =
并仅包括所需的属性。
编辑
NSEntityDescription *entity = [NSEntityDescription entityForName:@"myentity" inManagedObjectContext:managedObjectContext];
NSDictionary *propertiesByName = [entity propertiesByName];
fetchRequest.propertiesToFetch = @[[propertiesByName objectForKey:@"my_field_2"],[propertiesByName objectForKey:@"my_field_3", [propertiesByName objectForKey:@"my_field_4"]];
【讨论】:
好的,那么当我运行这个查询时,我如何选择my_field3, my_field4, my_field5
Select my_field3, my_field4, my_field5 from table group by my_field1
编辑只是针对您的评论...您如何选择。正如我在我的 OP 中所说,任何你想分组的东西都需要选择。您选择的任何内容也需要在 group by 中或应用聚合函数。否则,您的查询没有意义。
那么你的问题需要更清楚。请包含您想要查询的示例数据,以及您期望的输出结果。
根据您的编辑,为什么需要分组依据?您似乎只想选择@"my_field_2" 等于字符串@"MNO" 或@"DEF" 的实体?
不,不,我想选择最后一行,这就是我在 sql 查询中添加的原因,按 my_field3 desc 排序以上是关于Coredata groupby 属性 iOS的主要内容,如果未能解决你的问题,请参考以下文章