Mobilités professionnelles de l'Insee (novice)

Signaler
-
yg_be
Messages postés
10326
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
5 avril 2020
-
Bonjour,

Travaillant avec la mobilité professionnelle de l'Insee, je cherche à faire la somme d'un champ nommé Ipondi seulement sur les trajets commune de résidence à travail, et non pas travail à commune de résidence.

Admettons la colonne de commune de résidence nommée "Départ", et commune de travail nommée "Arrivée", et le champ que je souhaite faire la somme nommée "Ipondi", et admettons le cas suivant :


départ; arrivée; ipondi

La Ciotat; Marseille; 84
La Ciotat; Marseille; 15
Aubagne; Ceyreste; 12
Marseille; La Ciotat; 73



En effectuant la formule suivante ...
select départ, arrivée, sum(ipondi)
from trajets
group by départ, arrivée


J'obtiens donc le résultat suivant :


La Ciotat; Marseille; 99
Aubagne; Ceyreste; 12
Marseille; La Ciotat; 73



Ce qui est normal. Je voudrais cependant "supprimer" la ligne Marseille; La Ciotat car c'est le trajet retour des deux premières lignes.
Ceci étant pour arriver à ce résultat :

départ; arrivée; ipondi

La Ciotat; Marseille; 99
Aubagne; Ceyreste; 12


Comment faire cela sur PostgreSQL ?

Merci.

4 réponses

Messages postés
28075
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
5 avril 2020
2 240
Bonjour,

Avec un Where ?
WHERE depart <> "Marseille" 


et si tu veux retirer des départ toutes les éventuelles ville d'arrivée
WHERE depart NOT IN (SELECT DISCTINCT arrivee FROM trajets)


NB: Je n'ai pas mis d'accents... car.. en programmation on evite d'utiliser des caractères accentués et des caractères spéciaux dans le nom des variables, de nom de colonne dans une bdd ou dans le nom des tables. J'espère que tu n'as pas fait cette bêtise.. grosse source d'erreurs ou de complications en général....
Merci pour ta réponse. Effectivement, j'ai n'ai pas pensé à enlever les accents :s très bien de me le faire remarquer ^^

J'ai testé la formule, et elle est vraiment trop radicale ^^ dans mon fichier, je passe de 14500 entités à moins de 4000. De plus j'ai vérifié, et des éléments sont supprimés alors qu'ils ne le devrait pas (des trajets sans retour qui sont supprimés par exemple)

Effectivement, je travaille avec un plus gros fichier, voici un extrait.


id commune dclt ipondi
1 26058 26362 2930,034291
2 26235 26235 2556,313788
3 26252 26362 1375
4 26281 26362 1321,746085
5 26362 26058 1077,796173
6 26057 26057 1040,884915
7 26313 26362 898,4310606
8 26362 26252 859,2863628


Ainsi, la ligne 1 possède son sens inverse avec la ligne 5.
Et la ligne 3 avec la ligne 8.

En lien, mon fichier de données : https://drive.google.com/file/d/1TOB1MTAt8UNCjt0up6qcgnR593yMXkqt/view?usp=sharing
Messages postés
10326
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
5 avril 2020
582
puisque, contrairement à ce que tu avais montré au départ, il y a une colonne id dans la table, tu voudrais peut-être imaginer d'éliminer tous les enregistrements pour lesquels un enregistrement précédent (id plus petit) a l'origine comme destination, et la destination comme origine.
cependant, je ne pense pas qu'il soit possible de faire cela avec une requête. il faudrait le faire par programme.
et, en réalité, je pense que ce n'est pas une bonne solution.
je pense que la bonne solution serait de différencier les lieux de résidence et les lieux de travail.
ne pourrais pas prendre en compte tous les trajets, et faire la moyenne?
Messages postés
28075
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
5 avril 2020
2 240
Bonjour,

Je pense qu'en jouant avec la concaténation des champs depart arrivee et arrivee depart on devrait pouvoir s'en sortir.

Un truc du genre
WHERE CONCAT(arrivee,depart) NOT IN (SELECT CONCAT(depart,arrivee) FROM trajets)

yg_be
Messages postés
10326
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
5 avril 2020
582
j'ai l'impression que cela va supprimer les trajets aller comme les trajets retour, et qu'il ne restera plus que les trajets simples.