Android 带WHERE子句的多重计数()
我有一个包含flashcard对象的SQL表。该表中有一列指示抽认卡是免费的还是付费的。抽认卡分为几类。在我的android应用程序中,我需要显示每个类别的免费抽认卡数量,以及付费抽认卡数量。如果抽认卡不是免费的,它是付费的 我的SQL不是很好,到目前为止,我有一个查询返回免费的抽认卡数量: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
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”列,我不是在引入冗余数据吗?如果抽认卡不是免费的,那么必须付费。我编造了列名。。。我将编辑它以显示您的实际列名。