簡體   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