【发布时间】:2019-08-30 13:05:11
【问题描述】:
我为我的 Rails 4 应用程序中的一些统计分析编写了一个新的 SQL 查询。出于可维护性、可读性和一致性的目的,我更希望它在 ActiveRecord 查询中而不是 SQL 中表达,但我不知道该怎么做。
我找到了一些使用嵌套 JOINs 的代码,但没有找到嵌套 SELECTs 的代码。
我有一个名为 groups 的表,它与 group_members 具有一对多关系(这些也是 ActiveRecord 对象 Group 和 GroupMember)。
我正在尝试计算所有成员计数中具有 X 数量成员的组数。这是用于显示有多少成员组的分布图。
这是我编写的查询,当前使用ActiveRecord::Base.connection.exec_query 运行:
SELECT members_count, COUNT(members_count)
FROM (
SELECT COUNT(*) AS members_count, "group_id" AS group_id
FROM "groups"
INNER JOIN "group_members" ON "group_members"."group_id" = "groups"."id"
GROUP BY "group_id"
) AS groups_count
GROUP BY members_count
ORDER BY members_count;
如何将其转换为 ActiveRecord 查询? 我要解决的问题是嵌套的 SELECT 调用。这可以在 Rails 4 的 ActiveRecord 中实现吗?
【问题讨论】:
-
如果有帮助,这是正在生成的图表类型:imgur.com/a/JhEGTkp
-
您可能想要研究的一种方法(略有不同并有一些注意事项)是counter cache
标签: sql ruby-on-rails postgresql ruby-on-rails-4 rails-activerecord