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.
Pages: 1
- Sujet précédent - Valeur à la x ligne d'une colonne ayant la valeur la plus haute - Sujet suivant
#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
Pages: 1
- Sujet précédent - Valeur à la x ligne d'une colonne ayant la valeur la plus haute - Sujet suivant