如何根据布尔值计算两次相同的字段?

时间:2014-08-25 07:37:16

标签: mysql sql ruby-on-rails postgresql ruby-on-rails-4

我想用自定义选择和连接修复我的N + 1计数问题。 我的帖子和标签之间有多对多的关系。标签可以被确认或未被确认。 我想在我的帖子select语句中包含字段tags_confirmed_count和tags_unconfirmed_count(所以我可以避免以后为每个问题计算标签)。

我已经为以下查询的帖子执行了计数标记:

Post.joins(:tags).select("posts.*, COUNT(tags.id) AS tags_count").group("posts.id")

现在,对于将字段确认设置为true且一次为false的标记,我找不到计数标记的解决方案。

我试过这种方式,但是我这样我只计算确认的那些,但不是未经证实的那些:

Post.joins(:tags).select("posts.*, COUNT(tags.id) AS tags_confirmed_count").group("posts.id").where("tags.confirmed = true")

1 个答案:

答案 0 :(得分:3)

在真正的SQL中,不是Rails-ish,你会写:

SELECT 
  count(CASE WHEN confirmed THEN 1 END) AS n_confirmed,
  count(CASE WHEN NOT confirmed THEN 1 END) AS n_unconfirmed,
  ...
FROM posts 
  ...

希望能帮到你。不知道如何/如果可以将其转换为ActiveRecord-speak。