2016-07-13 13 views
0

以下のクエリがあります。この問題は、実行時に、私はこのエラーをスローしていることである:私は集約関数でそのフィールドを使用していないため、あまり意味がありません集計されていないフィールドにグループ化が必要エラー

column "v4.id" must appear in the GROUP BY clause or be used in an aggregate function 

。なぜこれがどんなアイデアですか?あなたはgroup byの列が欲しい理由正確ある

SELECT   c0."id", 
       c0."assigned_user_id", 
       c0."assigned_team_id", 
       c0."last_activity", 
       c0."last_message", 
       c3."unread_count", 
       c0."closed", 
       v4."name", 
       v4."avatar", 
       v4."id", 
       Count(c0."id") OVER() 
FROM   "conversations" AS c0 
LEFT OUTER JOIN "apps"   AS a1 
ON    a1."id" = c0."app_id" 
LEFT OUTER JOIN "conversation_users" AS c5 
ON    c5."conversation_id" = c0."id" 
LEFT OUTER JOIN "users" AS u2 
ON    c5."user_id" = u2."id" 
LEFT OUTER JOIN "conversation_users" AS c3 
ON    c3."conversation_id" = c0."id" 
LEFT OUTER JOIN "visitors" AS v4 
ON    v4."id" = c0."visitor_id" 
WHERE   (a1."id" = $1) 
AND    (u2."id" = $2) 
AND    (c3."user_id" = $3) 
GROUP BY  c0."id", 
ORDER BY  c0."last_activity" DESC ["ASnYW1-RgCl0I", "clt8ojxvk0000dp2fyvwq126", "clt8ojxvk0000dp2fyvwq126"] 
+0

GROUP BY句の最後に余分なカンマがあるようです。 –

答えて

3

。正式に言えば、あなたは本当にgroup byすべて非凝集の列を持っている必要があります。

group by c0."id", c0."assigned_user_id", c0."assigned_team_id", 
     c0."last_activity", c0."last_message", c0."closed", 
     c3."unread_count", 
     v4."name", v4."avatar", v4."id" 

Postgresはあなたがgroup by、まだアクセスに主キーまたは一意キーを交換しましょう(ANSI標準でサポートされている)の拡張子を持っています他の列。私は複数のテーブルでこれを使用していませんが、これはおそらく動作します:

group by c0."id", 
     c3."unread_count", 
     v4."id" 

さらに、あなたの選択はウィンドウ機能を使用しています。なぜそこにoverという句がありますか?これは集約クエリなので、この文脈で意味をなさない。

+0

あなたが「正式に話す」と言ったので... SELECTリスト_(グループ化された列に機能的に依存していない)で集計されていない列はすべてGROUP BYになければなりません。参照する拡張子は、このステートメントをコード化します。例えば。 'c0.id'はGROUP BYにあるので、全てのc0列をリストする必要はありません。 –

+0

私が見ているように、 'over'句の理由は、同じクエリで返されたレコード(リミット句の前)の正確な量を返したいからです – Tarlen

関連する問題