#1 Tue 11 July 2017 14:18
- tati
- Participant occasionnel
- Date d'inscription: 6 Jun 2017
- Messages: 27
Mettre à jour une colonne SUM()
Bonjour,
Je vous demande de l'aide car je cherche depuis quelques jours à résoudre le problème ci-dessous.
J'ai deux tables dans la premiere table il y'a 150 points et une colonne distance_totale qui est vide.
exemple de structure de la première table:
Code:
Point1, Distance_totale 1 2 3 4 5 etc...
Dans ma deuxième table j'ai calculé la distance entre tous les points de ma première table, (soit une combinaison de 150*150 car il y'a 150 points).
exemple de structure de la deuxième table:
Code:
Point1, Point2, Distance 1, 1, 0 1, 2, 3.25 1, 3, 22.12 1, 4, 41.1 1, 5, 59.78 2, 1, 52 2, 2, 0 2, 3, 42.96 2, 4, 10.36 etc...
Maintenant je souhaite mettre à jour ma première table, la colonne Distance_totale doit valoir la somme des distances des 3 points les plus proches de chaque point et j'arrive pas à rediger la bonne requête sur postgresql. Pouvez-vous m'aider ?
Hors ligne
#2 Tue 11 July 2017 15:04
- guil31
- Participant actif
- Date d'inscription: 22 Jan 2013
- Messages: 79
Re: Mettre à jour une colonne SUM()
Bonjour,
Avec la fonction de fenêtrage row_number() vous pouvez classer les points et ensuite faire la somme pour les 3 premiers.
Code:
select point_1, sum(distance) from (select *, row_number() over (partition by point_1 order by distance) as row_number from table_2) as S1 where row_number<= 3 group by point_1
Claire
Hors ligne
#3 Tue 11 July 2017 15:12
Re: Mettre à jour une colonne SUM()
Well done claire !
Freelance traitements ETL FME certifié: www.sitdi-france.fr Twitter : @sitdifrance
Site perso ~ www.partir-en-vtt.com
Hors ligne
#4 Tue 11 July 2017 15:44
- tati
- Participant occasionnel
- Date d'inscription: 6 Jun 2017
- Messages: 27
Re: Mettre à jour une colonne SUM()
C'est excellent !! Je vous remercie beaucoup pour la réponse si rapide.
Cependent j'ai des redondances dans la table_2 comment eviter cela ?
Je précise que pour avoir les colonnes point1 et point2 j'avais lancé la requête ci-dessous:
Code:
INSERT INTO table_2 (point1, point2) SELECT a.point1, b.point2 FROM table_1 As a, table_2 As b;
Hors ligne
#5 Tue 11 July 2017 16:27
- guil31
- Participant actif
- Date d'inscription: 22 Jan 2013
- Messages: 79
Re: Mettre à jour une colonne SUM()
remplacez table_2 par
Code:
select distinct * from table_2
Hors ligne
#6 Tue 11 July 2017 17:42
- tati
- Participant occasionnel
- Date d'inscription: 6 Jun 2017
- Messages: 27
Re: Mettre à jour une colonne SUM()
Donc ma nouvelle requête devient la suivante:
Code:
select point_1, sum(distance) from (select *, row_number() over (partition by point_1 order by distance) as row_number from (select distinct * from table_2) as res) as S1 where row_number<= 3 group by point_1
cette requête me donne pour le point_1: 1088 j'ai une distance totale de 596.598
Pour tester j'ai lancé cette requête:
Code:
select * from table_2 where point1=1088 order by dist asc limit 3
j'ai donc le résultat suivant:
Code:
Point1, Point2, Distance 108, 58, 167.051 108, 40, 214.774 108, 40, 214.774
en calculant la somme de ces 3 distances ça donne 596.598
donc "distinct" n'a pas éliminé les doublons
Hors ligne
#7 Tue 11 July 2017 17:53
- guil31
- Participant actif
- Date d'inscription: 22 Jan 2013
- Messages: 79
Re: Mettre à jour une colonne SUM()
Est-ce qu'il y a d'autres champs dans la table_2 qui feraient que les 2 enregistrements 108 sont différents?
Hors ligne
#8 Tue 11 July 2017 20:39
- tumasgiu
- Membre
- Lieu: Ajaccio
- Date d'inscription: 5 Jul 2010
- Messages: 1160
Re: Mettre à jour une colonne SUM()
Salut,
je rebondis sur le post de guil31, on peut spécifier
les champs à comparer dans la clause DISTINCT.
Ex:
Code:
SELECT DISTINCT ON(col1, col2) col1, col2, col3 FROM matable
Dernière modification par tumasgiu (Wed 12 July 2017 09:54)
Hors ligne