2017-02-15 5 views
1

私は2つのテーブル "トピック"(テーブルa)と "トピック_votes"(テーブルb)を持っています。 テーブルbの各行に属性 "vote"(ブール値)があります。SQLite - テーブルbの関連する行の計算結果に基づいてテーブルaから選択

トピックから行を選択し、topic_votesの関連するすべての行の合計を、vote = trueでtopic_votesのすべての関連行からvote = falseで差し引く必要があります。

たとえば、「トピック」の1行では、「topic_vote」に合計4行、vote = trueおよびvote = falseで合計3行あります。この場合、「sum_total」は2(3 - 1 )。

これをsqliteでどのように実装できますか?

+1

サンプルデータと予想される出力を表示してください。 –

+0

あなたの問題はどこですか?クエリで2つのテーブルを関連付ける方法が分かりませんか?または、行とカウントを集計する方法を知っていませんか?あなたが今までに得たクエリを表示し、あなたがどこにいるか教えてください。 –

答えて

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

よく書かれたクエリ。しかし、ヌルに注意してください。 –

+0

@ThorstenKettner - 更新されました...ありがとう – GurV

+0

トリックをしてくれてありがとうございました!しかし、今質問にはtopic_votesを持っていないトピックが含まれています。どのようにすればよいですか?これらのトピックも含めますか? –

関連する問題