gpt4 book ai didi

sql - ActiveRecord:按组计数

转载 作者:行者123 更新时间:2023-12-04 13:20:39 25 4
gpt4 key购买 nike

我有一个带有has_many注释的帖子模型。每个帖子都有一个线程ID(但没有名为Thread的模型)。

因此,如果我想计算这篇文章中的线程数,我确实喜欢

> post.comments.count(:thread, :distinct => true)
SELECT COUNT(DISTINCT "comments"."thread") FROM "comments" WHERE "comments"."post_id" = 3

而且这很好。但是,如果我只用一个注释来计算线程数怎么办?
> post.comments.group(:thread).having('COUNT(*) == 1').count
SELECT COUNT(*) AS count_all, thread AS thread FROM "comments" WHERE "comments"."post_id" = 3 GROUP BY thread HAVING COUNT(*) == 1 ORDER BY id

所以我有一个OrderedHash而不是Integer。而且我必须做不必要的步骤
> post.comments.group(:thread).having('COUNT(*) == 1').count.count

有没有更好的解决方案?

最佳答案

这是预期的行为。

post.comments.group(:thread).having('COUNT(*) == 1').count

这将返回一个哈希值,其中键是线程ID,而值是计数。我相信,只要您在Rails中进行具有汇总功能的组,便会遇到这种情况。您必须进行第二次计数才能获得第一个查询匹配的结果数。

我不确定在Rails中看起来如何,但是这是我认为您想要的SQL:
SELECT COUNT(*) FROM 
SELECT COUNT(*) AS count_all, thread AS thread
FROM "comments"
WHERE "comments"."post_id" = 3
GROUP BY thread
HAVING COUNT(*) == 1
ORDER BY id

关于sql - ActiveRecord:按组计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9497980/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com