Android 带WHERE子句的多重计数()

Android 带WHERE子句的多重计数(),android,sqlite,Android,Sqlite,我有一个包含flashcard对象的SQL表。该表中有一列指示抽认卡是免费的还是付费的。抽认卡分为几类。在我的android应用程序中,我需要显示每个类别的免费抽认卡数量,以及付费抽认卡数量。如果抽认卡不是免费的,它是付费的 我的SQL不是很好,到目前为止,我有一个查询返回免费的抽认卡数量: SELECT _id, category_primary, count(category_primary) FROM Flashcards WHERE available = '1' GROUP BY ca

我有一个包含flashcard对象的SQL表。该表中有一列指示抽认卡是免费的还是付费的。抽认卡分为几类。在我的android应用程序中,我需要显示每个类别的免费抽认卡数量,以及付费抽认卡数量。如果抽认卡不是免费的,它是付费的

我的SQL不是很好,到目前为止,我有一个查询返回免费的抽认卡数量:

SELECT _id, category_primary, count(category_primary) FROM Flashcards WHERE available = '1' GROUP BY category_primary;

当我使用适配器在列表视图中显示结果时,我想尝试在单个查询/光标中获取免费和付费抽认卡的计数。

您可以通过以下方式将
可用
列添加到组中:

SELECT
    _id,
    category_primary,
    available,
    count(category_primary) 
FROM 
    Flashcards 
GROUP BY
    available,
    category_primary;

顺便说一句,我原以为您需要原始查询和此更新版本中的
\u id
列-我之所以省略它,是因为我假设您的原始查询工作正常。

史蒂文·芬顿的答案很接近,但不是我想要的。我在这里找到了答案:

select f.category_primary, count(f1._id)as available_count, count(f0._id)as disable_count
from (select _id, category_primary from Flashcards) f 
left join (select _id from Flashcards where available='1') f1 on f1._id=f._id
left join (select _id from Flashcards where available='0') f0 on f0._id=f._id
group by f.category_primary
对我有效的查询是:

SELECT
    _id,
    category_primary,
    sum(CASE WHEN Flashcards.available = '1' THEN 1 ELSE 0 END) category_free,
    sum(CASE WHEN Flashcards.available = '0' THEN 1 ELSE 0 END) category_paid
FROM
    Flashcards
GROUP BY
    category_primary;

专栏
available
的命名对我来说相当糟糕,我的问题表达得不清楚。该专栏的更好名称应该是
is_free
感谢那些帮助回答我问题的人

从原始表中随机抽取一些
\u id
在分组查询中没有意义。@CL我只能猜测
\u id
类别\u primary
的主键,在这种情况下,我会将它包括在
组中,但一个组可以有多个具有相同
类别的记录。\u primary
。您好,谢谢您的回答。只是想澄清一下,“可用”是一个列,表示一张卡是否免费。如果我添加了一个“is_paid”列,我不是在引入冗余数据吗?如果抽认卡不是免费的,那么必须付费。我编造了列名。。。我将编辑它以显示您的实际列名。