2013-09-24 34 views
0

我有下表。Sqlite:單個查詢與2不同COUNT不使用UNION

CREATE TABLE "questions" 
("counter" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL UNIQUE , 
"questionid" INTEGER NOT NULL , 
"chapter" INTEGER NOT NULL , 
"image" VARCHAR NOT NULL) 

我想這一點:

CHAPTER, NUMBER OF QUESTIONS IN CHAPTER, NUMBER OF IMAGES IN CHAPTER 

我設法與UNION的結果,但這並不遵循上述我的要求(即我有2列的輸出,而不是3列)!

// First query: get only chapters with images, and count all questions 
SELECT Q1.chapter as "chapterID with images", count(q1.image) as c1 
FROM questions AS Q1 
where q1.chapter IN (SELECT chapter from questions where image NOT LIKE "") 
group by q1.chapter 

UNION 

// Second query: get only chapters with images and count only images 
SELECT Q2.chapter as "chapterID with images", count(q2.image) as c2 
FROM questions AS Q2 
WHERE Q2.image NOT LIKE "" 
group by q2.chapter 

嘗試使用單個查詢我只能得到第一個COUNT或第二個,例如如下所示。

// NOT WORKING! 
SELECT Q1.chapter as "chapterID with images", count(q1.image), count (q2.image) 
FROM questions AS Q1, questions AS Q2 
where q1.chapter IN (SELECT chapter from questions where IMAGE NOT LIKE "") 
AND q1.counter= q2.counter 
group by q1.chapter 

非常感謝。

UPDATE:解決方案

繼LS_dev建議的方法,我解決了如下。

我現在想從2子查詢得到的值和它們劃分(即圖像/題),但它不工作,但是我知道這是一個不同的問題...

SELECT chapter,  
(SELECT COUNT(*) FROM questions WHERE chapter=Q1.Chapter AND image NOT LIKE "") as "number of images", 
(SELECT COUNT(*) FROM questions WHERE chapter=Q1.Chapter) as "number of questions" 
FROM questions AS Q1 
WHERE chapter in (SELECT chapter from questions where IMAGE NOT LIKE "") 
GROUP BY chapter 
+0

'UNION'隨時添加行。 'JOIN'添加列,但不適合您的問題。 –

+0

我知道,是的,但謝謝你的評論。 – MDT

回答

4

這個問題是最適合於子查詢,因爲不同的計數需要:

SELECT chapter, COUNT(), 
    (SELECT COUNT() FROM questions WHERE chapter=q1.Chapter AND image NOT LIKE "") 
    FROM question AS q1 GROUP BY chapter; 

編輯:要允許一些操作:

CREATE VIEW sums_view AS SELECT chapter, COUNT() AS question_count, 
    (SELECT COUNT() FROM questions WHERE chapter=q1.Chapter AND image NOT LIKE "") AS image_count 
    FROM question AS q1 GROUP BY chapter; 
現在

,以前的查詢可以用作一個表:

SELECT * FROM sums; 

有些猜拳操作可以這樣做:

SELECT *, image_count*100.0/question_count AS image_ratio FROM sums_view; 
+0

謝謝,你可能知道如何從2個子查詢中獲取值並將它們分開(即圖像/問題)嗎? – MDT

+0

對於這樣的你最好創建一個視圖,他們操縱它。我會添加它來回答。 –

+0

我現在注意到了一個錯誤。我會做一些修正和調整。 –

相關問題