私はSQLiteのcount()
関数を使用して、店の在庫内のそれぞれの別個のアイテムの数量を計算しようとしています。重複行の数を数えてもSQLiteのdistinctの値だけを返す方法はありますか?
各行が異なる店舗の場所を表す「在庫」テーブルを作成することから始めました。店頭の
表:
db.execSQL("CREATE TABLE IF NOT EXISTS stores (" +
"_id INTEGER PRIMARY KEY AUTOINCREMENT, " +
"timestamp DATETIME DEFAULT CURRENT_TIMESTAMP " +
//many other columns (eg. address, state, phone...)
");");
私はその後_store_id
は基本的に「店舗」テーブルの主キーを指しているすべての項目のリストを含むテーブルを作成しました。商品バーコードスキャン情報の
表:
db.execSQL("CREATE TABLE IF NOT EXISTS item_scans (" +
"_id INTEGER PRIMARY KEY AUTOINCREMENT, " +
"_store_id INTEGER," +
"item_code VARCHAR " +
");");
特定の店舗の在庫情報を取得しようとしています。
開始するには、私は、リストを取得するには、単純なクエリを試してみました(sid
の変数はストアの主キーを選択するために使用されます)
問合せ:
Cursor cursor = db.rawQuery("SELECT _store_id, item_code " +
" FROM item_inventory" +
" WHERE _store_id = " + String.valueOf(sid),
null);
(重複を含む)すべての項目が返された結果を生成します。
結果:
0 {
_store_id=14
item_code=852874006301
}
1 {
_store_id=14
item_code=852874006301
}
2 {
_store_id=14
item_code=041570110461
}
それから各項目の発生回数をカウントし、唯一異なるitem_code
行を含む結果を返すためにを試みたが、私はまたあるべきでitem_inventory
と呼ばれる新しい列を含みます指定されたsid
に対して何個の同一のitem_code
エントリが存在したかの数のカウント。
問合せ:
Cursor cursor = db.rawQuery("SELECT DISTINCT t1._store_id, t1.item_code, t2.item_quantity " +
" FROM item_invnetory t1 " +
" INNER JOIN (SELECT _store_id, item_code, count(item_code) AS item_quantity " +
" FROM item_inventory" +
" WHERE _store_id = " + String.valueOf(sid) +
") t2 " +
" ON t1._store_id = t2._store_id " +
" WHERE t1._store_id = " + String.valueOf(sid),
null);
その特定のストアのすべての項目の合計数量を計算するかのようにこれは私に明確な項目のリストを与えるが、item_inventory
の値が正しくないと表示されます。
結果:
0 {
_store_id=14
item_code=041570110461
item_quantity=3
}
1 {
_store_id=14
item_code=852874006301
item_quantity=3
}
私が実際に達成しようとしていたのは、item_inventory
が店舗の場所にある個々のアイテムの合計アイテム数の値であるSQLiteクエリを使用することでした。望ましい結果の
例:
0 {
_store_id=14
item_code=041570110461
item_quantity=1
}
1 {
_store_id=14
item_code=852874006301
item_quantity=2
}
私はSQLiteの経験の私の不足のために謝罪、私はしばしばinner join
および/またはdistinct
を使用して取得していないも私は、一般的に、生のクエリの多くを使用します私の上司はAndroidを使ってプロジェクトを作成し、ListViewにすべてを表示するように頼んだ。
なぜMySQLタグですか?希望する出力が得られる元のサンプルデータを提供してください。 (また、[ のSQLテーブルをスタックオーバーフローでフォーマットするには ポスト?](http://meta.stackexchange.com/q/96125)) –
MySQLタグのタイプミス!それを指摘してくれてありがとう。また、SQLテーブルの書式設定に関するヒントもありがとう! – Logic1