我有一個表Content
顯示COUNT(*)列值0在多行
內容(ID,contentText,contentDate,ID用戶所→用戶,則contentType)
和表VoteQuestion
VoteQuestion(ID用戶→用戶,idQuestion→內容,ISUP)
我要選擇,例如,第前30個最近的問題。
SELECT *
FROM "Content"
WHERE "type" = 'QUESTION'
ORDER BY "contentDate"
LIMIT 30
不過,我想連接到與此有關這一問題的資料另一列,所以我不需要再次查詢數據庫返回的每一個問題。
例如,我想要計算每個問題的投票數,並將其全部返回到同一行。
實施例:
| id | contentText | contentDate | idUser | contentType | votes |
-----------------------------------------------------------------
| 2 | 'abc' | '2013-03-25'| 192 | 'QUESTION' | 10 |
我嘗試以下查詢:
WITH question AS
(SELECT *
FROM "Content"
WHERE "type" = 'QUESTION'
ORDER BY "contentDate"
LIMIT 30
)
SELECT COUNT("VoteQuestion"."idUser")
FROM "VoteQuestion", question
WHERE "idQuestion" = question."id"
GROUP BY question."id";
但這並不與票數返回問題= 0(僅16個問題返回而不是30)。如何解決它?
那麼,我該如何集中這兩個表?我怎樣才能減去isUp
爲真,isUp
在查詢中爲false?
我很欣賞你的答案,但我怎麼能完成我的最後一個問題? '如果我在查詢中isUp爲真且isUp爲假,我怎麼能減去選票?'有沒有簡單的方法來做到這一點,或者我應該創建2個不同的列upvotes和downvotes列? –
而不是使用計數,你可以使用像SUM(CASE WHEN isUp = TRUE THEN 1 ELSE -1 END)。因此,對於每個具有isUp = TRUE的記錄,您都要添加一個,對於每個記錄with isUp = FALSE,您減去一個。 –