gpt4 book ai didi

sql - 如何在 SWIFT 的 IOS CORE-DATA 请求中使用 SQL GROUP BY 和 SUM 函数?

转载 作者:搜寻专家 更新时间:2023-11-01 05:46:09 29 4
gpt4 key购买 nike

我有一个表(交易),其中包含包含账户名和交易金额的记录。我想计算每个账户以“私有(private)”开头且交易金额 > 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 来实现你想要的。关键步骤是:

  1. 创建一个获取请求
  2. 指定一个 NSPredicate 以根据您选择的条件进行过滤
  3. resultType 设置为 .DictionaryResultType(“Group By”需要)
  4. 设置要包含在提取中的属性(要获取 sum(),这涉及创建 NSExpression 和关联的 NSExpressionDescription)。
  5. 将属性设置为分组依据
  6. 创建一个 NSSortDescriptor 以按名称降序排序
  7. 执行抓取

请看下面的代码:

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”的帐户(因此 过滤结果[0]);您的生产代码应该检查。

关于sql - 如何在 SWIFT 的 IOS CORE-DATA 请求中使用 SQL GROUP BY 和 SUM 函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28010110/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com