1

对不起,naff 的标题,但我真的不知道如何解释这一点,我是新一代的 SQL 技能由于活动记录模式而下降的人之一!

基本上我在 PostgreSQL 中有三个表

客户端(一个客户端有许多地图)- id

地图(地图有一个客户端和多个图层) - id - client_id

图层(图层有一张地图) - id - map_id

我想编写一个 SQL 查询,它返回 Client.id 以及客户端拥有的地图数量以及客户端在所有地图中拥有的图层总数。

这可以通过单个查询来实现吗?速度无关紧要,因为这只是出于分析目的,因此不会经常运行。

4

2 回答 2

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;
于 2012-11-14T01:25:04.283 回答
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

为了使其工作,您需要在模型之间声明关联(客户端 has_many :maps,Map has_many :layers)

你可以在 ActiveRecord 的查询界面中去 depper这里

于 2012-11-14T01:38:09.497 回答