2016-11-14 18 views
1

私はUnion Allを使用してクエリを実行しています。重複する行が結果クエリに追加されていることを確認します。 Union Allを使用すると、重複行が正しく追加されません。 Googleでは、「重複したSQLのユニオン」を検索すると、「連合は重複を取り除きます。ユニオンはそうではありません。クエリーの最初の部分に重複はありません。 UNIONを理解しているので、すでに存在する結果セットの行には追加されませんが、最初のデータセットにすでに存在する重複は削除されません。私の場合は、すでに入っている結果セットの行を追加する必要があります。どうすればいい?ここでSQL - Union Allを使用して重複を追加する

は私のクエリは次のとおりです。すべての助けを事前に

SELECT player_name_fkey, school_name_fkey, score_simple, sum(score_simple) over (partition by player_name_fkey) as sum_scores 

FROM (

    SELECT player_name_fkey, school_name_fkey, SUM(score) as score_simple 

     FROM simple LEFT JOIN players on players.name=simple.player_name_fkey 

     WHERE category='Cadet' AND gender='Féminin' GROUP BY player_name_fkey, school_name_fkey 

    UNION ALL 

     SELECT player_name_fkey, school_name_fkey, SUM(score) as score_simple 

     FROM double LEFT JOIN players on players.name=double.player_name_fkey 

     WHERE category='Cadet' AND gender='Féminin' GROUP BY player_name_fkey, school_name_fkey) t1 

GROUP BY player_name_fkey, school_name_fkey, score_simple 

ありがとう!

+2

最後にGROUP BY句を削除してみます。 –

+0

魅力的な作品です、ありがとうございます! –

答えて

1

Felix Pamittanによると、最後にGROUP BY句を削除すると私の問題が解決しました。

SELECT player_name_fkey, school_name_fkey, score_simple, sum(score_simple) over (partition by player_name_fkey) as sum_scores 

FROM (

    SELECT player_name_fkey, school_name_fkey, SUM(score) as score_simple 

    FROM simple LEFT JOIN players on players.name=simple.player_name_fkey 

    WHERE category='Cadet' AND gender='Féminin' GROUP BY player_name_fkey, school_name_fkey 

UNION ALL 

    SELECT player_name_fkey, school_name_fkey, SUM(score) as score_simple 

    FROM double LEFT JOIN players on players.name=double.player_name_fkey 

    WHERE category='Cadet' AND gender='Féminin' GROUP BY player_name_fkey, school_name_fkey) t1 
関連する問題