2014-03-13 81 views
0

我有一個包含flashcard對象的SQL表。該表格中有一列表明閃存卡是免費還是付費。抽認卡分爲幾類。在我的android應用程序中,我需要顯示每個類別的免費閃卡數量以及付費的閃卡數量。如果閃卡不是免費的,它將被支付。多個計數()與WHERE子句

我的SQL不是很大,到目前爲止,我有一個查詢,返回卡片它們是自由的數量:

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

我想嘗試讓兩個免費的計數,並在支付卡片單個查詢/遊標,因爲我使用適配器將結果顯示在ListView中。

回答

0

史蒂文芬頓的答案接近,但不是我想要的。我在這裏找到了我的答案: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感謝那些幫助回答我的問題的人!

2

您可以將available列添加到GROUP BY:拋開

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

作爲,我本來期望你需要在這兩個原始查詢的_id列,此更新版本 - 我已經離開它因爲我假設您的原始查詢正常工作。

+0

從原始表中取出一些隨機'_id'在分組查詢中沒有意義。 –

+0

@CL我只能猜測'_id'是'category_primary'伴隨的主鍵,在這種情況下,我會將它包含在'GROUP BY'中。 – Fenton

+0

但是一個組可以有多個具有相同'category_primary'的記錄。 –

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