SQLite CASE,SUM和COUNT

时间:2013-03-26 16:53:57

标签: android sqlite expandablelistview android-sqlite

我正在制作一个清单应用程序作为学习练习。基础知识运作良好,现在我正在尝试添加一些花里胡哨的东西。

当我按类别(在expandablelistview中)对列表进行排序时,如果检查了类别的所有内容,则应检查类别组视图。

我保留标志,以确定是否在包含特定列表项的表中选中了单个列表项。我使用一个简单的1/0标志来表示已选中或未选中。我实现我的功能的想法是在我的查询中使用这样的东西来查明是否所有项都被检查:

CASE WHEN sum(list_items.checked) = count(list_items.checked) THEN 1 ELSE 0 END AS 'groupchecked'

想,如果他们都被检查(1),然后他们全部的总和应等于他们所有的个性化......然而,当我插入的代码为我的查询,每个类别的多个项目什么没有出现。我确定这个问题是由于我对SQLite缺乏熟悉,但我似乎无法找到使其正常工作的正确方法。

我当前尝试使用选中的标记获取组游标:

public Cursor fetchGroup(String group, long list) {
    String query = "SELECT DISTINCT "
            + group
            + " AS _id, CASE WHEN sum(list_items.checked) = count(list_items.checked) THEN 1 ELSE 0 END AS groupchecked FROM "
            + LISTITEM_TABLE
            + " JOIN "
            + ITEM_TABLE
            + " ON list_items.item_id=items._id WHERE list_items.list_id = "
            + list;
    return mDb.rawQuery(query, null);
}

1 个答案:

答案 0 :(得分:0)

create table FOO(grp text, subgroup text, checked int)

insert into FOO(grp, subgroup, checked)
select 'feline','lion',1
union
select 'feline','tiger',0
union
select 'canine','dog',1
union
select 'canine','wolf',1


select grp, sum(checked) as checkedSum, count(checked) as checkedCount
from foo
group by grp

现在制作内联视图:

select X.grp
from
(
select grp, sum(checked) as checkedSum, count(checked) as checkedCount
from foo
group by grp

) X

where checkedSum=checkedCount