Я пытаюсь использовать функцию SQLite count()
для вычисления количества элементов для каждого отдельного элемента в инвентаре магазина.Как подсчитать количество повторяющихся строк, но возвращать только значения отдельных в SQLite?
Я начал с создания таблицы «инвентаря», в которой каждая строка представляет различные местоположения магазина.
Таблица витрин:
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);
Это дает мне список различных элементов, но значение для 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.
Почему тег MySQL? Пожалуйста, предоставьте исходные данные образца, которые приведут к желаемому результату. (Также см. [How to формат SQL-таблиц в переполнении стека post?] (Http://meta.stackexchange.com/q/96125)) –
Общая опечатка на теге MySQL! Спасибо что подметил это. Также спасибо за подсказку по форматированию таблиц SQL !! – Logic1