[英]Is it possible to construct dynamic aggregate columns in an ARel query that uses a join?
[英]Arel join sub query
我是Rails和Arel的新手,我创建了一个联接查询,但是写得不好
join_query =
ActiveRecord::Base.connection.execute <<~SQL.strip_heredoc
(
SELECT schools.name, sum(q.enrollment), count(*) FROM schools LEFT JOIN
(
SELECT sites.school_id, sites.enrollment FROM sites JOIN projects ON
sites.project_id = projects.id
WHERE sites.school_id IS NOT NULL and projects.type IN ('Startup') AND projects.deleted_at IS NULL
) q
ON q.school_id = schools.id
GROUP BY schools.name
)
SQL
join_query.values
如何使用Arel编写?
另外,您能否指出我有关该主题的优秀教程?
提前致谢
这是我可以使用给定的SQL得出的结果:
schools = Arel::Table.new("schools")
sites = Arel::Table.new("sites")
projects = Arel::Table.new("projects")
join = sites.project(:school_id, :enrollment)
.join(projects).on(sites[:project_id].eq(projects[:id]))
.where(
sites[:school_id].not_eq(nil)
.and(projects[:type].in("Startup"))
.and(projects[:deleted_at].eq(nil))
)
q = Arel::Table.new(join).alias(:q)
schools.project(:name, q[:enrollment].sum, Arel.star.count)
.join(join, Arel::Nodes::OuterJoin).on(q[:school_id].eq(schools[:id]))
.group(schools[:name])
作为新手,这些是我经常访问的参考资料:
https://www.rubydoc.info/github/rails/arel (官方文档)
https://devhints.io/arel (非常有用的备忘单,但不完整)
https://gist.github.com/mildmojo/3724189 (左外部联接的示例)
https://jpospisil.com/2014/06/16/the-definitive-guide-to-arel-the-sql-manager-for-ruby.html (有关Arel的全面指南)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.