集計関数
Spring '10から集計関数が利用できるようになりました。
APIバージョン18以上で使用可能のようです。
利用できる集計関数は以下の6種類。
関数名 | 結果 |
---|---|
Avg | 平均値 |
Count | レコード件数 |
Count_Distinct | nullと重複値を除いたレコード件数 |
Max | 最大値 |
Min | 最小値 |
Sum | 合計値 |
こんな感じで↓使用します。
Select Count(Id) From Account Where Name Like 'a%'
グループ化したい場合は、Group By句と共に利用します↓
Select Name, Max(BudgetedCost) From Campaign Group By Name
Apexではクエリ結果を、
AggregateResult(複数の場合はList<AggregateResult>)で受け取り、AggregateResultオブジェクト.get('名称')で値を取得します。
集計関数の名称は↓のように付けます(maxNumが名称)。
Select Name, Max(Num__c) maxNum From Order__c Group By Name
集計関数の結果取得部分のソースコードはこんな感じ。
List<AggregateResult> aggregateList =
[
Select
Name,
Max(Num__c) maxNum
From
Order__c
Group By
Name
];
for(AggregateResult a : aggregateList) {
Integer maxNum = Integer.valueOf(a.get('maxNum'));
// 処理
}
Integer maxNum = a.get('maxNum');
のところで、下記エラーが出るのですがなぜでしょうか?
Illegal assignment from Object to String
投稿: mmnmmr | 2011年8月 1日 (月) 18:20
すみません。Integer型に変換しないと駄目でしたね。
正しくは、
Integer maxNum = Integer.valueOf(a.get('maxNum'));
となります。
ご指摘ありがとうございます。
本文も直しておきます。
投稿: tama | 2011年8月 2日 (火) 01:47
突然の不躾な指摘にも関わらず、丁寧に対応していただきありがとうございました。
実はsalesforceの勉強を始めたばかりで、何をどう進めていいのか分からず、書き方も良く理解できずにもやもやしながら、こちらにたどり着いたところでした。
今は平均値取得のために試行錯誤していたのですが、こちらの記事を見て、また質問にも答えていただき、なんとか目的の値を取得できました。
ありがとうございました。
投稿: mmnmmr | 2011年8月 2日 (火) 12:16
こちらこそ、ご指摘ありがとうございました。
最初は調べることだらけで大変かもしれませんが、
学習頑張って下さいね。
当ブログもお役に立てるような記事を、
これからも更新し続けられるよう頑張ります!
投稿: tama | 2011年8月 2日 (火) 12:50