CoreData - 集計関数

2010年8月1日日曜日 | Published in | 1 コメント

このエントリーをはてなブックマークに追加

集計指示子


以前、最大値を求めるコードを紹介した。
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 といったユニークなものまで用意されている。

コメント

  1. 匿名
    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

  2. 匿名
    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

Leave a Response

人気の投稿(過去 30日間)