Pages: 1
- Sujet précédent - Diviser les entités d'une colonne par une autre colonne en SQL - Sujet suivant
#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: 96
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: 1549
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
Pages: 1
- Sujet précédent - Diviser les entités d'une colonne par une autre colonne en SQL - Sujet suivant