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

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

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

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") 

在真正的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。