【问题标题】:SQLite - select from table a based on result of calculation of relevant rows in table bSQLite - 根据表 b 中相关行的计算结果从表 a 中选择
【发布时间】:2017-02-16 00:16:47
【问题描述】:

我有两个表,“topics”(表 a)和“topic_votes”(表 b)。 表 b 中的每一行都有一个属性“投票”(布尔值)。

我需要从主题中选择行,并按 topic_votes 中所有相关行的总和进行排序,其中 vote=true 减去 topic_votes 中所有相关行且 vote=false。

例如,对于“topics”中的一行,“topic_vote”中有 4 行,其中 3 行表示 vote=true,1 行表示 vote=false,在这种情况下,“sum_total”将为 2 (3 - 1) .

如何在 sqlite 中实现它?

【问题讨论】:

  • 请展示一些示例数据和预期输出。
  • 您的问题到底出在哪里?您不知道如何在查询中关联两个表吗?或者你不知道如何聚合行和计数?最好显示您到目前为止的查询并告诉我们您遇到的问题。

标签: sql database sqlite


【解决方案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。随意将其设置为您拥有的任何列名称。

【讨论】:

  • 写得很好的查询。但是请注意空值;制作这个count(case when ... 或添加else 0
  • @ThorstenKettner - 已更新。 . .谢谢。
  • 谢谢你成功了!但现在查询不包括没有 topic_votes 的主题。我怎样才能将这些主题也包括在内?
猜你喜欢
  • 2015-08-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-31
  • 2011-06-25
  • 1970-01-01
相关资源
最近更新 更多