2017-02-15 89 views
1

我有兩個表,「主題」(表a)和「topic_votes」(表b)。 表b中的每一行都有一個屬性「vote」(布爾值)。SQLite - 根據表中的相關行的計算結果選擇表b

我需要從主題中選擇行,並按topic_votes中的所有相關行的總數排列,並用vote = true將topic_votes中的所有相關行減去vote = false。

例如,對於「主題」中的一行,「topic_vote」中有四行總數,3表示vote = true,1表示vote = false,在這種情況下,「sum_total」將爲2(3-1 )。

我該如何在sqlite中實現這個功能?

+1

請顯示一些示例數據和預期輸出。 –

+0

你的問題到底在哪裏?你不知道如何在查詢中關聯這兩個表嗎?或者你不知道如何聚合行和數量?顯示目前爲止的查詢並告訴我們您卡在哪裏可能會很好。 –

回答

1

你可以找到子查詢每個主題中計票之差,然後用主題表像這樣加入吧:

select t.* 
from topics t 
join (
    select topic_id, 
     sum(case when topic_vote = 'true' then 1 else 0 end) - 
     sum(case when topic_vote = 'false' then 1 else 0 end) diff 
    from topic_votes 
    group by topic_id 
) v on t.topic_id = v.topic_id 
order by v.diff desc, t.topic_id; 

我假設的關係列topic_id。隨意將其設置爲您擁有的任何列名稱。

+0

寫得很好的查詢。儘管如此,請注意空值。讓這個'count(case when when ...')或者添加'else 0'。 –

+0

@ThorstenKettner - Updated ...。謝謝。 – GurV

+0

謝謝你做了這個訣竅!但是現在查詢不包括那些沒有topic_votes的主題。還包括這些主題? –

相關問題