2014年7月15日火曜日

Android : SQLite で SUM (TOTAL) を使って合計を出す

rawQuery を使うようですね。
rawQuery で SUM もしくは TOTAL を使った場合、行、列ともに 1 の Cursor が返ってくるそうです。
テーブル名の指定方法や WHERE 句を使うかは場合によりますが、
以下サンプルコードです。
(SQLiteOpenHelper を継承したクラス内を想定して getReadableDatabase() を使用しています。)

SQLiteDatabase db = getReadableDatabase();
Cursor cursor = db.rawQuery(
    String.format("SELECT SUM(%s) FROM %s WHERE %s = ? ",
    COLUMN_POINT, TABLE_NAME, COLUMN_ID), new String[]{ String.valueOf(id) });
int point = 0;
if(cursor.moveToNext()){
    point = cursor.getInt(0);
}
cursor.close();
db.close();

ちなみに SUM と TOTAL の違いは
  • カラムの値が NULL だけだった場合、SUM は NULL を返す。TOTAL は 0.0 を返す。
  • カラムの値が整数値のみだった場合、SUM は整数を返す。TOTAL は浮動小数点を返す。
という事らしいです。
cursor.getInt() は column の値が NULL だった場合 Exception を投げるような気がするので、NULL の可能性がある列で SUM を撮る場合は try catch で囲ったほうが良いのかもしれませんね。(そういう列で SUM を取っていないので未確認。)

参考 : Fetching a SQLite SUM in Java on Androidsum関数 / total関数

0 件のコメント:

コメントを投稿