Nous utilisons des cookies pour vous garantir la meilleure expérience sur notre site. Si vous continuez à utiliser ce dernier, nous considèrerons que vous acceptez l'utilisation des cookies. J'ai compris ! ou En savoir plus !.
banniere

Le portail francophone de la géomatique


Toujours pas inscrit ? Mot de passe oublié ?
Nom d'utilisateur    Mot de passe              Toujours pas inscrit ?   Mot de passe oublié ?

Annonce

Rencontres QGIS 2025

L'appel à participation est ouvert jusqu'au 19 janvier 2025!

#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

Loic_GR
Moderateur
Lieu: Besancon
Date d'inscription: 12 May 2011
Messages: 1025
Site web

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 sad sad

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

 

Pied de page des forums

Powered by FluxBB