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 を取っていないので未確認。)
cursor.getInt() は column の値が NULL だった場合 Exception を投げるような気がするので、NULL の可能性がある列で SUM を撮る場合は try catch で囲ったほうが良いのかもしれませんね。(そういう列で SUM を取っていないので未確認。)
参考 : Fetching a SQLite SUM in Java on Android、sum関数 / total関数
0 件のコメント:
コメントを投稿