Pages: 1
- Sujet précédent - QGIS: Selection en fonction des sommes de valeurs d'attribut - Sujet suivant
#1 Thu 07 September 2023 12:08
- Jkerebel04
- Participant occasionnel
- Lieu: Oraison
- Date d'inscription: 21 Apr 2020
- Messages: 26
QGIS: Selection en fonction des sommes de valeurs d'attribut
Bonjour à tous.
Je viens vers vous car je tourne un peu en rond sur ma problématique.
Sur Postgis, je recherche à sélectionner les x premières entités dont la sommes des longueurs représente 10% de la totalité des longueurs…
J’ai tenté pour commencé:
SELECT id FROM ma_table WHERE sum(ma_table.longueur)=100
ou encore
SELECT id FROM ma_table LIMIT sum(ma_table.longueur)=100
Mais les fonctions d’agrégats ne sont autorisées dans WHERE ni dans LIMIT.
Auriez-vous une piste, une alternative SVP ?
Jérôme
« Patience et longueur de temps font plus que force et ni que rage » - Jean de La Fontaine, Le Lion et le Rat.
Hors ligne
#2 Thu 07 September 2023 14:43
- anthony.v
- Participant occasionnel
- Date d'inscription: 13 Apr 2023
- Messages: 25
Re: QGIS: Selection en fonction des sommes de valeurs d'attribut
Bonjour,
Je ne sais pas s'il existe une solution plus "propre", mais celle présentée ici semble fonctionner : https://stackoverflow.com/questions/105 … is-reached
Hors ligne
#3 Wed 20 September 2023 12:05
- Jkerebel04
- Participant occasionnel
- Lieu: Oraison
- Date d'inscription: 21 Apr 2020
- Messages: 26
Re: QGIS: Selection en fonction des sommes de valeurs d'attribut
Bonjour, et merci beaucoup pour le lien.
Cela fonctionne parfaitement.
Attention néanmoins. Dans mon cas, j'ai besoin de faire un ORDER_BY sur un attribut et non sur l'ID. Et la requête fonctionnait mal car cet attribut comprend beaucoup de valeurs redondantes. Aussi j'ai du passer par une table intermédiaire pour rajouter un champ 'serial' reprenant le classement souhaité. Après quoi ça roule.
Code:
-- Création d'une table de passage pour ordonner la table suivant le l'attribut prod_crit DROP TABLE IF EXISTS amdec_cana_xls2 ; CREATE TABLE amdec_cana_xls2 AS SELECT id, fonction, mat_diam, nb_inter_aep, annee_pose, crit_fonc, crit_diam, crit_mat, crit_age, crit_argi, crit_brt_plom, prod_crit, nom_rue, longueur, retenu, geom, rang, etiquette, crit_inter_aep, cod_insee FROM public.amdec_cana_xls ORDER BY prod_crit DESC; -- Ajout d'une colonne serial d'indexation ALTER TABLE amdec_cana_xls2 ADD COLUMN classement serial; -- Selection des entités en fonction du cumul des longueurs, dans l'ordre d'indexation select id, prod_crit, longueur, cumul_longueur from ( select id, prod_crit, longueur, sum(longueur) over (order by classement asc) as cumul_longueur from amdec_cana_xls2 ) t where cumul_longueur <= 2000
Dernière modification par Jkerebel04 (Wed 20 September 2023 12:05)
« Patience et longueur de temps font plus que force et ni que rage » - Jean de La Fontaine, Le Lion et le Rat.
Hors ligne
Pages: 1
- Sujet précédent - QGIS: Selection en fonction des sommes de valeurs d'attribut - Sujet suivant