我正在尝试使用 SQLite 的count()
函数来计算商店库存中每个不同项目的项目数量。
我首先创建了一个“库存”表,其中每一行代表不同的商店位置。
店面表:
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
,该列应该是item_code
给定sid
.
询问:
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);
这给了我一个不同项目的列表,但是for的值item_inventory
是不正确的,看起来好像是它在计算特定商店的所有项目的总数:
结果:
0 {
_store_id=14
item_code=041570110461
item_quantity=3
}
1 {
_store_id=14
item_code=852874006301
item_quantity=3
}
我真正希望实现的是使用SQLite查询,其中item_inventory
存储位置中每个不同商品的商品总数的值。
所需结果示例:
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 中显示所有内容。
为此使用GROUP BY 子句,无需使用 JOIN 或 DISTINCT。
SELECT item_code, COUNT(*) as item_quantity
FROM item_inventory
WHERE _store_id = ?
GROUP BY item_code
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句