Voici les données :
me friend game status count
1 2 gem done 10
2 1 gem done 5
1 3 gem done 4
3 1 gem done 6
Voici ma question :
WITH
-- outgoing for all
outgoing_for_all AS
(SELECT
me,
sum(count) AS sum
FROM game_totals
WHERE status IN ('pending', 'done')
GROUP BY me),
-- incoming for all
incoming_for_all AS
(SELECT
friend,
sum(count) AS sum
FROM game_totals
WHERE status IN ('pending', 'done')
GROUP BY friend)
SELECT
me,
outgoing_for_all.sum AS outgoing,
incoming_for_all.sum AS incoming,
outgoing_for_all.sum - incoming_for_all.sum AS score
FROM outgoing_for_all
FULL OUTER JOIN incoming_for_all ON outgoing_for_all.me = incoming_for_all.friend
Voici le résultat :
me outgoing incoming score
1 14 11 3
2 5 10 -5
3 6 4 2
Est-il possible d'écrire la requête ci-dessus de manière à ce qu'elle soit plus rapide ? Je pense qu'il y a une possibilité de faire la somme avec un seul SELECT
. Le problème, c'est que je ne sais pas comment faire pour GROUP BY
de manière à ce que je puisse résumer count
de deux rangs en un seul.
Nous vous remercions.