2017-02-23 9 views
0

私は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にすべてを表示するように頼んだ。

+1

なぜMySQLタグですか?希望する出力が得られる元のサンプルデータを提供してください。 (また、[ のSQLテーブルをスタックオーバーフローでフォーマットするには ポスト?](http://meta.stackexchange.com/q/96125)) –

+0

MySQLタグのタイプミス!それを指摘してくれてありがとう。また、SQLテーブルの書式設定に関するヒントもありがとう! – Logic1

答えて

1

これにはGROUP BY clauseを使用します.JOINまたはDISTINCTを使用する必要はありません。

SELECT item_code, COUNT(*) as item_quantity 
FROM item_inventory 
WHERE _store_id = ? 
GROUP BY item_code 
+0

完璧!どうもありがとうございます!私はStackOverflowが大好き – Logic1

関連する問題