如何根据布尔值计算两次相同的字段?
我想通过自定义选择和连接来修复我的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。
- 在Ubuntu上运行Rails时遇到问题
- 使用Ruby on Rails 3加载libmysql.dll文件失败
- MySQL复合索引中的键的高性能排序(WRT Rails多态关联和STI)
- 试图在现有的mysql db上构建rails 3.2 app
- Rails mysql2 undefined方法`accept’代表nil:NilClass
- 将XML文件中的数据导入MySQL数据库
- 如何修复libmysqlclient.15.dylib未加载导致的错误?
- 尝试在Windows,RubyMine IDE中使用Ruby on Rails的LoadError
- Rails-MySQL错误 – 未初始化的常量MysqlCompat :: MysqlRes