我有一个表(Transactions),其中包含包含Account_name和交易金额的记录.我想计算每个帐户的所有交易的总额,以“私人”开头,交易金额为> 1000.我想按名称按降序排列帐户.

所以sql请求会是这样的:

SELECT Account_name,SUM(Amount) 
    FROM Transactions
    WHERE Account_name like 'Private%'
    and Amount > 1000
    GROUP BY Account_name
    ORDER BY Account_name DESC

我如何在Swift中使用Core-DATA来做到这一点.

谢谢

请记住,CoreData不是关系数据库,因此您应该认为实体不是“表”,对象不是“记录”.另请注意,按照惯例,属性名称不应以大写字母开头.也就是说,可以构造一个fetch来实现你想要的.关键步骤是:

>创建一个获取请求
>根据您选择的标准指定nspredicate进行过滤
>将resultType设置为.DictionaryResultType(“分组依据”必需)
>设置要包含在fetch中的属性(获取sum(),这涉及创建NSExpression和关联的NSExpressionDescription).
>将属性设置为分组依据
>创建一个NSSortDescriptor按名称降序排序
>执行提取

请参阅以下代码:

let fetch = NSFetchRequest(entityName: "Transaction")
let predicate = nspredicate(format: "Account_name like %@ AND Amount > %@","Private*",NSNumber(double: 1000.0))
fetch.predicate = predicate
fetch.resultType = .DictionaryResultType
let sumExpression = NSExpression(format: "sum:(Amount)")
let sumED = NSExpressionDescription()
sumED.expression = sumExpression
sumED.name = "sumOfAmount"
sumED.expressionResultType = .DoubleAttributeType
fetch.propertiesToFetch = ["Account_name",sumED]
fetch.propertiesToGroupBy = ["Account_name"]
let sort = NSSortDescriptor(key: "Account_name",ascending: false)
fetch.sortDescriptors = [sort]
let results = managedobjectContext?.executeFetchRequest(fetch,error: nil) as NSArray?

结果将是一个字典数组,其键为“Account_name”和“sumOfAmount”.

编辑
要提取特定Account_name的值,请使用另一个谓词:

let newPredicate = nspredicate(format: "Account_name like %@","toto")!
    if let resultsArray = results { // to unwrap the optional
        let filteredResults = resultsArray.filteredArrayUsingPredicate(newPredicate)
        let sumOfAmount = (filteredResults[0] as NSDictionary)["sumOfAmount"] as Double
    }

我忽略了前一个示例将Account_name过滤为以“Private”开头的事实,并假设您将拥有一个(且只有一个)名称为“toto”的帐户(因此filteredResults [0]);你的生产代码应该检查.

如何在SWIFT中的IOS CORE-DATA请求中使用SQL GROUP BY和SUM函数?的更多相关文章

  1. 关于h5中的fetch方法解读(小结)

    这篇文章主要介绍了关于h5中的fetch方法解读(小结),fetch身为H5中的一个新对象,他的诞生,是为了取代ajax的存在而出现,有兴趣的可以了解一下

  2. ios – 为什么“NOT IN”在这个NSPredicate中不起作用?

    A.b和B.a与许多关系相反.为什么这个谓词为A工作:虽然这个没有:我认为两个谓词都应该给出相同的结果–通过b与bObject无关的As的集合.但实际上,第一个给出正确的集合,而第二个没有.更新:这是sampleproject,其中A.b由Account.filtered_clients体现,B.a由Client.filtered_by体现.在MasterViewController.m中切

  3. ios – 如何创建一个比较对象所有属性的谓词?

    例如,我有一个具有三个属性的对象:firstName,middleName,lastName.如果我想使用nspredicate在所有属性中搜索字符串“john”.而不是像以下那样创建谓词:[nspredicatepredicateWithFormat:@“(firstName包含[cd]%@)OR(lastName包含[cd]%@)OR(middleName包含[cd]%@)”,@“john”,

  4. ios – 使用NSPredicate搜索/过滤自定义类数组

    我有一个包含自定义类对象的数组,我想基于其中一个类属性是否包含自定义字符串来过滤数组.我有一个方法,传递我想要搜索的属性(列)和它将搜索的字符串(searchString).这是我的代码:但是,它始终抛出异常displayProviders=[[tempfilteredArrayUsingPredicate:query]mutablecopy];说这个类不是密钥值编码兼容的密钥[无论searchS

  5. ios – 构建复杂的NSCompoundPredicate最好的方法是什么?

    我需要用许多数据构建一个nspredicate.例如在sql中,我会做如下的操作:我正在努力与如何构建一个用于核心数据的nspredicate.我已经阅读了只提供简单实例的文档.如果有人能指出一个更复杂的例子,我一定会感激的.那么我在这里回答了两年,很多人觉得有帮助.我的帖子已被删除.以下是更新的解决方案URL.https://www.radeeccles.com/convert-sql-stat

  6. ios – 如何通过在CloudKit中的creationDate进行查询?

    我想从CloudKit获取最后十分钟的公共/私人条目.我尝试了一些这样的效果,但失败了:但这会让我得到数据,但是我不知道我是查询一切,还是只是某种上限:我想能够查询一定的时间.这样做可能没有在客户端做创建排序逻辑吗?

  7. iOS:NSPredicate使用NSDate进行比较

    解决方法我认为你今天的看法有问题.AFAIK,NSDate代表了一个绝对的时间点,所以你在没有“时间”的情况下创建“日期”的努力似乎是徒劳的.而且使用NSDateFormatter设置日期也是不稳定的.我想你必须创建两个不同的NSDate对象:startOfCurrentDay和endOfCurrentDay,并且亲自地使用NSCalendar.如果这样做,您的提取请求谓词将是:

  8. 如何在IOS中使用两个谓词过滤UITableView

    解决方法是的,像这样…然后,这将显示所有以名字从搜索开始的人,或者姓氏以搜索开始.我更喜欢使用这种格式在单个谓词中使用OR和AND,因为它使整个代码更易读.这也可以用来获得谓词的NOT.如果您使用单个谓词内置复合谓词,也可以很容易地感到困惑.

  9. ios – 具有多重条件的NSPredicate

    我正在尝试创建具有多个条件的nspredicate.我找到了几个解决方案,但是他们似乎都没有使用我的方法.我找到的最好的一个是下面.这是我的单一谓词方法,它的工作原理很好:这是我的编辑版本与多个条件.我不知道出了什么问题.有任何想法吗?解决方法你可以试试这个

  10. ios – 如何在Swift中为PHFetchOptions格式化NSPredicate?

    本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请发送邮件至dio@foxmail.com举报,一经查实,本站将立刻删除。

随机推荐

  1. Swift UITextField,UITextView,UISegmentedControl,UISwitch

    下面我们通过一个demo来简单的实现下这些控件的功能.首先,我们拖将这几个控件拖到storyboard,并关联上相应的属性和动作.如图:关联上属性和动作后,看看实现的代码:

  2. swift UISlider,UIStepper

    我们用两个label来显示slider和stepper的值.再用张图片来显示改变stepper值的效果.首先,这三个控件需要全局变量声明如下然后,我们对所有的控件做个简单的布局:最后,当slider的值改变时,我们用一个label来显示值的变化,同样,用另一个label来显示stepper值的变化,并改变图片的大小:实现效果如下:

  3. preferredFontForTextStyle字体设置之更改

    即:

  4. Swift没有异常处理,遇到功能性错误怎么办?

    本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请发送邮件至dio@foxmail.com举报,一经查实,本站将立刻删除。

  5. 字典实战和UIKit初探

    ios中数组和字典的应用Applicationschedule类别子项类别名称优先级数据包contactsentertainment接触UIKit学习用Swift调用CocoaTouchimportUIKitletcolors=[]varbackView=UIView(frame:CGRectMake(0.0,0.0,320.0,CGFloat(colors.count*50)))backView

  6. swift语言IOS8开发战记21 Core Data2

    上一话中我们简单地介绍了一些coredata的基本知识,这一话我们通过编程来实现coredata的使用。还记得我们在coredata中定义的那个Model么,上面这段代码会加载这个Model。定义完方法之后,我们对coredata的准备都已经完成了。最后强调一点,coredata并不是数据库,它只是一个框架,协助我们进行数据库操作,它并不关心我们把数据存到哪里。

  7. swift语言IOS8开发战记22 Core Data3

    上一话我们定义了与coredata有关的变量和方法,做足了准备工作,这一话我们来试试能不能成功。首先打开上一话中生成的Info类,在其中引用头文件的地方添加一个@objc,不然后面会报错,我也不知道为什么。

  8. swift实战小程序1天气预报

    在有一定swift基础的情况下,让我们来做一些小程序练练手,今天来试试做一个简单地天气预报。然后在btnpressed方法中依旧增加loadWeather方法.在loadWeather方法中加上信息的显示语句:运行一下看看效果,如图:虽然显示出来了,但是我们的text是可编辑状态的,在storyboard中勾选Editable,再次运行:大功告成,而且现在每次单击按钮,就会重新请求天气情况,大家也来试试吧。

  9. 【iOS学习01】swift ? and !  的学习

    如果不初始化就会报错。

  10. swift语言IOS8开发战记23 Core Data4

    接着我们需要把我们的Rest类变成一个被coredata管理的类,点开Rest类,作如下修改:关键字@NSManaged的作用是与实体中对应的属性通信,BinaryData对应的类型是NSData,CoreData没有布尔属性,只能用0和1来区分。进行如下操作,输入类名:建立好之后因为我们之前写的代码有些地方并不适用于coredata,所以编译器会报错,现在来一一解决。

返回
顶部