我有一个包含flashcard对象的SQL表。该表有一列表明闪卡是免费还是付费。抽认卡分为几类。在我的Android应用程序中,我需要显示每个类别的免费抽认卡数量,以及支付的抽认卡数量。如果闪卡不是免费的,则支付。
我的SQL不是很好,到目前为止我有一个查询,它返回免费的抽认卡数量:
SELECT _id, category_primary, count(category_primary) FROM Flashcards WHERE available = '1' GROUP BY category_primary;
我想尝试在单个查询/光标中获取免费和付费闪卡的计数,因为我使用适配器在ListView中显示结果。
答案 0 :(得分:2)
您可以将available
列添加到GROUP BY:
SELECT
_id,
category_primary,
available,
count(category_primary)
FROM
Flashcards
GROUP BY
available,
category_primary;
顺便说一下,我原本期望你在原始查询和这个更新版本中都需要_id
列 - 我把它留了出来因为我假设你的原始查询工作正常。
答案 1 :(得分:0)
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
答案 2 :(得分:0)
对我有用的查询是:
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
感谢那些帮助回答我问题的人!