2016-08-11 6 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リストに表示されます。 2つのオプションがあります。subを変更して単一の値を返すか、このサブ要因を外部クエリに結合しようとすることができます。あなたがサブクエリが各ユーザーやエージェントのためにいくつかの集計を行うことになっていると述べたことを考えると、私の推測では、参加は答えです。以下のクエリでは、subのユーザーIDと一致するエージェントIDの外側のクエリにsubを追加します。

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、これは素晴らしいものであり、説明は私に多くのことができます。私はメインのクエリにサブを参加することができました。サブキーにagent_idを追加して、 'a.id'(' sub.id'はユーザーID)の 'LEFT JOIN'に対してそれを使用しました。しかし、' a.id'でグループ化できません。あなたも私を助けてくれますか? – theDrifter

+0

ok私はそれが別の質問であることを認識しています;)これはここにありがとう;) – theDrifter

関連する問題