2016-08-11 56 views
1

我有以下子查詢。 最後,我想爲所有這些用戶的控制器計數每個代理。 因此,在子字符串中,我計算了所有代理的控制器用戶和 然後我想總結它們。Postgresql 9.4從子句中缺少子查詢

本身運行的子,然而,當我運行完整的查詢

ERROR: missing FROM-clause entry for table "sub" 
LINE 2: a.id as a_id, SUM(sub.c_count) as c_count, 



SELECT 
a.id as a_id, SUM(sub.c_count) AS c_count, 
(
SELECT u.id, COUNT(c.user_id) AS c_amount 
FROM users u 
JOIN controllers c ON (c.user_id = u.id) 
GROUP BY 
u.id 
)sub 
from agents a; 

回答

1

你得到這個錯誤我得到這個錯誤,因爲你有別名爲sub回報不僅多條記錄,而且子查詢每個記錄有多個值,但它出現在SELECT列表中。通常,只有標量(單個值)或返回單個值的子查詢可以出現在SELECT列表中。您有兩個選項,您可以修改sub以返回單個值,也可以嘗試將此子音位連接到外部查詢。鑑於你提到子查詢應該爲每個用戶或代理做一些聚合,我的猜測是加入是答案。在下面的查詢中,我將subsub中與用戶標識匹配的代理標識的外部查詢加入。

SELECT a.id AS a_id, 
     COALESCE(sub.c_amount, 0) AS c_count 
FROM agents a 
LEFT JOIN 
(
    SELECT u.id, COUNT(c.user_id) AS c_amount 
    FROM users u 
    INNER JOIN controllers c 
     ON c.user_id = u.id 
    GROUP BY u.id 
) sub 
    ON a.id = sub.id 
+0

Niiice,這是很棒的東西,這個解釋對我很有幫助。我設法將sub加入到主查詢中。我在子查詢中加入了agent_id,用''LEFT JOIN'用'a.id'('sub.id'是用戶ID),但是我不能用'a.id'分組。你能幫我嗎? – theDrifter

+0

好的,我意識到這是一個不同的問題;)在這裏感謝s;) – theDrifter