【问题标题】:How to count same field twice based on a boolean?如何根据布尔值对同一字段进行两次计数?
【发布时间】:2014-08-25 07:37:16
【问题描述】:

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

【问题讨论】:

  • 您可以从所有子结构中确认并获得未确认。

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


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2012-05-03
    • 1970-01-01
    • 2021-06-19
    • 2022-10-04
    • 2023-04-05
    • 1970-01-01
    • 2017-05-07
    • 2021-02-16
    • 2019-06-18
    相关资源
    最近更新 更多