我需要帮助将下面的MySQL查询转换为ActiveRecord查询,将产生与IP记录作为对象的关系。为了更好地解释这一点,如何在ActiveRecord查询的How to sum two virtual column into third column in sql中转换以下查询?
select a_id
u_c,
i_c,
(u_c + i_c) as t_c
from (
select distinct a.id as a_id,
( SELECT count(b.id) FROM UP b
WHERE b.i_p_id = a.id
AND b.role = "L"
) as u_c,
( SELECT count(b.id) from UP b
WHERE b.institution_package_id = a.id
AND b.role = "I"
) as i_c
from IP a
left outer join UP b on b.IP = a.id
) sub
让我再解释一下。我有两个表,我在第一个表中查询并计算3个虚拟列。第3列将是其他2个虚拟列的总和。谢谢你的帮助
1条答案
按热度按时间aor9mmx11#
在SQL中编写复杂的查询并通过Rails执行它们是一个简单的,好的,而且通常是更短的解决方案。
但是如果你真的想使用Rails工具来实现可重用性和/或安全性,那么这个查询可以通过Arel来实现,Arel是ActiveRecord查询内部构建的工具。
这被认为是私有API,可能会发生变化。升级滑轨时要小心。
它会产生这样的东西
我添加了几个别名,使其与初始查询类似,但由于Arel负责引用它们,因此大多数别名都可以删除。