【问题标题】:SQLite CASE, SUM and COUNTSQLite CASE、SUM 和 COUNT
【发布时间】:2013-03-26 16:53:56
【问题描述】:

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

当我按类别对列表进行排序时(在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);
}

【问题讨论】:

    标签: android sqlite expandablelistview android-sqlite


    【解决方案1】:
    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
    

    【讨论】:

      猜你喜欢
      • 2017-06-05
      • 1970-01-01
      • 2020-12-12
      • 2012-12-02
      • 1970-01-01
      • 2013-05-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多