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

Printemps des cartes 2024

#1 Fri 13 August 2021 11:21

Hippo
Participant actif
Date d'inscription: 18 Jan 2015
Messages: 57

Diviser les entités d'une colonne par une autre colonne en SQL

Bonjour,

Je dispose de 2 tables dans PostgreSQL.
L'une correspond à une liste de communes avec leur superficie en km², la seconde table quant à elle, liste un certain nombre d'unités surfaciques avec des surfaces également en km².
Je voudrais pouvoir diviser la superficie de chaque commune, en fonction des différentes surfaces présentes dans ma seconde table.
En somme cela reviendrait à dire, combien la commune 1 peut contenir d'unité 1 ? d'unité 2 ? ... ? Combien la commune 2 peut contenir d'unité 1 ? d'unité 2 ? ... ?

Mes données étant stockées dans PostGreSQL, je me demandais donc s'il était possible de réaliser un tel traitement en SQL ?
Je ne connais malheureusement SQL que dans les grandes lignes et il me semble a priori compliqué (voir impossible) de créer une boucle qui viendrait boucler sur mes 2 tables et effectuer ces calculs.

Hors ligne

 

#2 Fri 13 August 2021 12:19

Ben22
Participant actif
Lieu: 33
Date d'inscription: 11 May 2016
Messages: 95

Re: Diviser les entités d'une colonne par une autre colonne en SQL

Bonjour ,

Vous pouvez effectuer cette opération par un SELECT nom_commune, nom_unite, supf_commune / supf_unite FROM commune, unite.

Voici un exemple avec des données farfelues pour voir si cette syntaxe correpond à votre demande :

Code:

/*définition de 2 tables communes et unites*/
WITH commune AS (SELECT unnest(ARRAY['commune1', 'commune2', 'commune3']) AS commune,  unnest(ARRAY[36.2, 53.6, 44.4]) as superf),
unite AS (SELECT  unnest(ARRAY['unite1', 'unite2', 'unite3']) as unite,  unnest(ARRAY[5.6,12.3,26.1]) as supf)
/*la requete en question*/
SELECT t1.commune, t2.unite, (t1.superf / t2.supf) as resultat_division FROM commune t1, unite t2

Hors ligne

 

#3 Fri 13 August 2021 12:34

Hippo
Participant actif
Date d'inscription: 18 Jan 2015
Messages: 57

Re: Diviser les entités d'une colonne par une autre colonne en SQL

Super, c'est tout à fait ça Ben22, un grand merci !!
Parfois on va chercher bien loin ce qui est assez simple au final ... :-)

Hors ligne

 

#4 Fri 13 August 2021 13:14

Nicolas Ribot
Membre
Lieu: Toulouse
Date d'inscription: 9 Sep 2005
Messages: 1536

Re: Diviser les entités d'une colonne par une autre colonne en SQL

Bonjour,

Oui, c'est tout à fait possible en SQL. Les "boucles" se font toutes seules, lorsqu'on fait des jointures entre tables: on met en correspondance des lignes d'une table avec une autre sur la base de valeurs de colonnes communes.
Comme on peut appliquer des calculs ou fonctions sur ces valeurs de colonnes, on peut réaliser des jointures complexes entres les tables.

Par exemple, si les deux tables ont un champ code insee:

Code:

select c.gid, c.insee_com,
       c.superficie/s.unite_1 as unite1,
       c.superficie/s.unite_2 as unite2,
       c.superficie/s.unite_3 as unite3
from commune c join commune_stats s on s.insee_com = c.insee_com;

Nicolas

Hors ligne

 

#5 Fri 13 August 2021 14:06

Hippo
Participant actif
Date d'inscription: 18 Jan 2015
Messages: 57

Re: Diviser les entités d'une colonne par une autre colonne en SQL

Merci pour ces précisions Nicolas !
J'en ai profité pour me pencher un peu plus sur les jointures du coup :-)

Hors ligne

 

Pied de page des forums

Powered by FluxBB