繁体   English   中英

如何根据布尔值对同一字段两次计数?

[英]How to count same field twice based on a boolean?

我想通过自定义选择和联接解决我的N + 1计数问题。 我的帖子和标签之间存在多对多关系。标签可以确认也可以不确认。 我想在我的帖子选择语句中包括标签字段tag_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")

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM