集計指示子
以前、最大値を求めるコードを紹介した。
Cocoaの日々: Core Data - 最大値を取得する
この時は -[NSExpression expressionForFunction:argument:] の第一引数に @"max:" を渡していた。
NSExpression *expression = [NSExpression expressionForFunction:@"max:" arguments:[NSArray arrayWithObject:keyPathExpression]];ここを sum: にすると合計になるし count: だと個数を求めることができる。Objective-C コードは長いものになるが、実際に発行されている SQL はたった一行になる。以下、max:, sum:, count: を指定した場合の実例。
CoreData: sql: SELECT max( t0.ZTREATEDDATE) FROM ZKARTE t0 WHERE t0.ZCUSTOMER = ? CoreData: sql: SELECT COUNT( t0.ZTREATEDDATE) FROM ZKARTE t0 WHERE t0.ZCUSTOMER = ? CoreData: sql: SELECT total( t0.ZFEE) FROM ZKARTE t0 WHERE t0.ZCUSTOMER = ?
関数
あらかじめ利用可能な関数が定義されている。定義は下記のリファレンスで確認できる。
NSExpression Class Reference - expressionForFunction:argument
以下に引用する。
average: sum: count: min: max: median: mode: stddev: add:to: from:subtract: multiply:by: divide:by: modulus:by: sqrt: log: ln: raise:toPower: exp: ceiling: abs: trunc: random random: now floor: uppercase: lowercase: bitwiseAnd:with: bitwiseOr:with: bitwiseXor:with: leftshift:by: rightshift:by: onesComplement: noindex:
標準的な集計関数の他、random や now といったユニークなものまで用意されている。
匿名
2013年4月30日 17:01
いつも,記事を参考にしています。
iOSだとすべての関数は使えないみたいです。
average:からnowまではリファレンスのAvailabilityにiOSが載っていないので。
でも,average:,sum:,count:,min:,max:はなぜか使えました。
なぜか使えたおかげで,median:とかでエラーが出てはまりまくりました。
ここにも
http://stackoverflow.com/questions/9863930/ios-core-data-standard-deviation
匿名
2013年4月30日 17:01
いつも,記事を参考にしています。
iOSだとすべての関数は使えないみたいです。
average:からnowまではリファレンスのAvailabilityにiOSが載っていないので。
でも,average:,sum:,count:,min:,max:はなぜか使えました。
なぜか使えたおかげで,median:とかでエラーが出てはまりまくりました。
ここにも
http://stackoverflow.com/questions/9863930/ios-core-data-standard-deviation