首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带WHERE子句的多重计数()

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

Stack Overflow用户
提问于 2014-03-13 02:54:16
回答 3查看 278关注 0票数 0

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

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

代码语言:javascript
复制
SELECT _id, category_primary, count(category_primary) FROM Flashcards WHERE available = '1' GROUP BY category_primary;

当我使用适配器在ListView中显示结果时,我希望在一个查询/游标中获得免费和付费闪存卡的计数。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-03-15 05:10:29

史蒂文·芬顿的回答接近了,但不是我想要的。我在这里找到了答案:How to get multiple counts with one SQL query?

对我有用的查询是:

代码语言:javascript
复制
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,谢谢那些帮助我回答问题的人!

票数 0
EN

Stack Overflow用户

发布于 2014-03-13 02:58:05

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

代码语言:javascript
复制
SELECT
    _id,
    category_primary,
    available,
    count(category_primary) 
FROM 
    Flashcards 
GROUP BY
    available,
    category_primary;

顺便提一下,我希望您在原始查询和更新版本中都需要_id列--我忽略了它,因为我假设您的原始查询工作正常。

票数 2
EN

Stack Overflow用户

发布于 2014-03-13 02:59:56

代码语言:javascript
复制
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
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22368189

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档