对于naff标题感到抱歉,但我不确定如何解释这个问题,由于活跃的记录模式,我是SQL技能降级的新一代之一!
基本上我在PostgreSQL中有三个表
客户端(一个客户端有很多地图) - id
地图(地图有一个客户端和多个图层) - ID - client_id
图层(图层有一个图) - ID - map_id
我想写一个返回Cliend.id的SQL查询,以及客户端有多少个地图的计数以及客户端在所有地图上的总层数。
单个查询是否可以实现?速度并不值得关注,因为这仅用于分析目的,所以不经常运行。
答案 0 :(得分:2)
我会使用一对子查询。类似的东西:
SELECT
id,
(
SELECT count(map.id)
FROM map
WHERE map.client_id = client.id
) AS n_maps,
(
SELECT count(layer.id)
FROM map INNER JOIN layer ON (layer.map_id = map.id)
WHERE map.client_id = client.id
) AS n_layers
FROM client;
答案 1 :(得分:1)
我这样做,客户端模型中方法内的单个SQL查询:
def self.statistics
Client.select("
clients.id AS client_id,
COUNT(DISTINCT(maps.id)) AS total_maps,
COUNT(layers.id) AS total_layers")
.joins(maps: :layers)
.group("clients.id")
end
为了使其正常工作,您需要在模型之间声明的关联(Client has_many:maps,Map has_many:layers)
您可以在ActiveRecord的查询界面here
中进行删除