NSFetchRequest总和,分组依据和排序

时间:2013-02-10 04:35:59

标签: objective-c sorting core-data group-by nsfetchrequest

在我的应用程序中,我试图列出四种最受欢迎​​的产品 产品受欢迎程度取决于订单总量。

下面的查询是为了说明我正在尝试做的事情:

SELECT     TOP 4  SUM(quantity) as sumQuantity, Product
FROM       [Order]
GROUP BY   Product
ORDER BY   1 DESC

下面的代码是我在针对我的核心数据模型的获取请求中获取它的方法:

// Create an expression to sum the order quantity
NSExpressionDescription *sumExpression = [[NSExpressionDescription alloc] init];
sumExpression.name = @"sumQuantity";
sumExpression.expression = [NSExpression expressionWithFormat:@"@sum.%K", OrderAttributes.quantity];
sumExpression.expressionResultType = NSInteger32AttributeType;

// Create the fetch request
NSFetchRequest *request = [Order createFetchRequest];
request.resultType = NSDictionaryResultType;
request.propertiesToFetch = @[OrderRelationships.product, sumExpression];
request.propertiesToGroupBy = @[OrderRelationships.product];
request.sortDescriptors = @[[NSSortDescriptor sortDescriptorWithKey:sumExpression.name ascending:NO]];
request.fetchLimit = 4;

我的问题是sortDescriptor,它似乎只允许Order的直接属性(app exception) 排序非常重要,因为它确定将返回哪四个记录。

注意:我正在使用MagicalRecord和Mogenerator。我删除了类前缀。

1 个答案:

答案 0 :(得分:3)

不幸的是,NSSortDescriptor希望实际属性排序,而不是动态计算字段。根据您的情况,您可能希望在模型本身上保存所需的计数器并按其排序,或者获取整个图形并在内存中对其进行排序。