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

Suite à un problème technique intervenu entre le 22 et le 23 mars, nous avons du procéder dans la soirée du 25 mars, à la restauration de la base de données du 24 mars (matinée).

En clair, nous avons perdu vos contributions et inscriptions du dimanche 24 et du lundi 25 mars.
Nous vous prions de nous excuser.

#1 Mon 14 March 2022 09:04

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

Valeur à la x ligne d'une colonne ayant la valeur la plus haute

Bonjour,

J'ai une table dans PostGreSQL qui liste les départements français et les communes composant chacun des départements, ainsi que les populations municipales.
J'ai classé cette table de façon à ne garder que les 200 communes ayant la population la plus importante.
Pour ce faire, j'ai utilisé le code suivant grâce à l'aide de membres de ce forum

Code:

SELECT
  * 
FROM (
  SELECT
    ROW_NUMBER() OVER (PARTITION BY departement ORDER BY population DESC) AS r,
    t.*
  FROM
    table t) x
WHERE
  x.r <= 200;

J'aimerais maintenant savoir quelle est la population de la commune de chaque département à la 200è ligne.
Donc avoir une liste de chaque département avec la valeur de la population de la commune à la 200è ligne.
A priori je n'ai pas vraiment de problème pour cette partie.
Mon problème réside dans le fait que certains départements ont moins de 200 communes. Je souhaiterais donc dans ce cas avoir la population pour la la commune à la ligne x, la ligne x étant la dernière commune a être listée.
Ainsi si un département ne compte que 50 communes, je souhaiterais d'abord renvoyer le nombre "50", puis aller récupérer la population référente à cette ligne.
Pour information, j'ai également découpé mes départements en plusieurs tranches

Code:

SELECT 
   *
    MAX(case t1.code_dep when <25 then t1.r end) max25,
    MAX(case t1.code_dep when >25 and <50 then t1.r end) max50
FROM 
    departements as t1
WHERE t1.r = t1.maxrp

Ca ne fonctionne pas puisque j'ai en retour un msg me disant que je ne peux pas utiliser l'alias maxrp ici.
J'ai essayé en mettant ma fonction Max dans un select dans le where, mais pas possible non plus.

Hors ligne

 

#2 Mon 14 March 2022 15:14

EmilieDB
Participant occasionnel
Date d'inscription: 23 Jan 2007
Messages: 22

Re: Valeur à la x ligne d'une colonne ayant la valeur la plus haute

Bonjour,

si j'ai bien compris votre demande, la requête suivante doit convenir. Le principe :
- la sous requête t associe un rang à chaque commune pour chaque département, ainsi que vous l'avez déjà fait,
- la sous requête 'detail' ne conserve que les 200 1ers rangs
- la sous requete lmax donne la ligne correspondant au rang maximum de la sous requête "détail" (donc 200 ou moins si le département compte moins de 200 communes)
- une jointure entre lmax et detail permet de récupérer tout le détail pour le rang 200 ou maximum.

Code:

with t as(
select row_number() over(partition by code_dpt order by pop_municipale) r, *
from table_population)
,detail as(
select *  from t where r<=200 )
, lmax as
(select max(r)r,code_dpt from t group by code_dpt)

select *  from
lmax inner join t on lmax.r=t.r and lmax.code_dpt=t.code_dpt

order by t.code_dpt

Emilie

Hors ligne

 

Pied de page des forums

Powered by FluxBB