如何在核心数据中添加Group by中的多个属性

时间:2013-04-26 14:50:08

标签: ios5 core-data ios6 sqlite

我要求从核心数据中获取表格中的名称,电子邮件,手机号码,金额(金额)。

如果我使用sql,那么我的sql查询如下所示:

  select name,eMail,mobileNo,sum(amount)  amt1 from T1 GROUP BY name,eMail,mobileNo;

我在这里找到了正确的结果。

我与核心数据一样。

我可以通过提供GROUP BY名称获取名称和SUM(金额)。我已为此提供了以下代码。

[request setPropertiesToGroupBy:[NSArray arrayWithObject:statusDesc]];

我不知道如何在核心数据中添加Group by中的多个属性。任何人都可以帮助我做到这一点。

 NSEntityDescription *entityDesc = [NSEntityDescription entityForName:@"Entity1" inManagedObjectContext:context];

 NSAttributeDescription* statusDesc = [entityDesc.attributesByName objectForKey:@"name"];


NSExpression *sumExpression = [NSExpression expressionForFunction:@"sum:" arguments:[NSArray arrayWithObject:[NSExpression expressionForKeyPath:@"totalAmount"]]];

NSExpressionDescription *expressionDescription = [[NSExpressionDescription alloc]init];
[expressionDescription setName: @"sumTot"];
[expressionDescription setExpression: sumExpression];
[expressionDescription setExpressionResultType:NSDecimalAttributeType];


NSFetchRequest *request = [[NSFetchRequest alloc] init];
[request setEntity:entityDesc];

[request setPropertiesToFetch:[NSArray arrayWithObjects:@"name",expressionDescription, nil]];
[request setPropertiesToGroupBy:[NSArray arrayWithObject:statusDesc]];
[request setResultType:NSDictionaryResultType];

NSError *error = nil;
myArray = [context executeFetchRequest:request error:&error];

1 个答案:

答案 0 :(得分:1)

感谢您为解决方案指明方向。

我得到了解决方案。这是arrayWithObject和 arrayWithObjects

之间的一个愚蠢的错误
 NSAttributeDescription* statusDesc = [entityDesc.attributesByName objectForKey:@"name"];
 NSAttributeDescription* statusDesc1 = [entityDesc.attributesByName objectForKey:@"eMail"];
 NSAttributeDescription* statusDesc2 = [entityDesc.attributesByName objectForKey:@"mobileNo"];

之后我通过了所有这样的描述。

[request setPropertiesToGroupBy:[NSArray arrayWithObjects :statusDesc,statusDesc1, statusDesc2, nil]];