我有一个SQL表,其中包含闪存卡对象。该表中有一列显示闪存卡是免费的还是付费的。闪存卡分为类别。在我的android应用程序中,我需要显示免费的闪存卡的数量,以及为每个类别付费的闪存卡的数量。如果一张闪存卡不是免费的,它是付费的。
我的SQL不是很好,到目前为止,我有一个查询,它返回免费的闪存卡数量:
SELECT _id, category_primary, count(category_primary) FROM Flashcards WHERE available = '1' GROUP BY category_primary;当我使用适配器在ListView中显示结果时,我希望在一个查询/游标中获得免费和付费闪存卡的计数。
发布于 2014-03-15 05:10:29
史蒂文·芬顿的回答接近了,但不是我想要的。我在这里找到了答案:How to get multiple counts with one SQL query?。
对我有用的查询是:
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,谢谢那些帮助我回答问题的人!
发布于 2014-03-13 02:58:05
可以通过以下方式将available列添加到组中:
SELECT
_id,
category_primary,
available,
count(category_primary)
FROM
Flashcards
GROUP BY
available,
category_primary;顺便提一下,我希望您在原始查询和更新版本中都需要_id列--我忽略了它,因为我假设您的原始查询工作正常。
发布于 2014-03-13 02:59:56
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_primaryhttps://stackoverflow.com/questions/22368189
复制相似问题