Mobilités professionnelles de l'Insee (novice)

kevin -  
yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   -
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

jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752
 
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....
0
kevin
 
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
0
yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   Ambassadeur 1 584
 
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?
0
jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752
 
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)

0
yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   1 584
 
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.
0