Vous n'êtes pas identifié(e).
- Contributions : Récentes | Sans réponse
Pages : 1
#1 23/12/2014 14:48:19
- lea
- Membre
Boucle dans postgresql
Bonjour,
je cherche à faire une boucle dans postgresql mais je ne connais pas l'équivalent 'for' en postgresql...
Je cherche à faire ce genre de requête en gros :
table1
------------
code_com pop code_district
---------------------------------------------------------
21001 25 yu
21001 5 re
21001 2 tr
21001 15 ZZ
21002 68 ee
21002 6 rt
21002 30 ZZ
21003 108 ii
21003 26 io
21003 88 ZZ
21004 52 fe
21004 98 cf
21004 8 ZZ
21005 89 az
21005 78 ws
21005 7 ZZ
--pour code_com = 21001
select * from (select *, pop+round((select zz1.pop from (select * from table1 where code_district='ZZ' AND code_com='21001')zz1 )*pop_portion) as repart from
(select *,pop/(select s1.sum from (select code_com, sum(pop) from table1 where code_district <> 'ZZ' AND code_com='21001' group by code_com order by code_com)s1) as pop_portion from
(select* from table1 where code_com='21001')com21001 where code_district<>'ZZ' order by code_com, pop) foo) repart1
c'est une table fictive, j'ai beaucoup plus d'enregistrements que ça et la requête est juste un aperçu d'une requête plus longue ...
Je dois faire cette requête pour chaque code_com et faire une union de toutes les requêtes ce que j'aimerais éviter de faire, c'est :
requête pour code_com 21001 union requête pour code_com 21001 union requête pour code_com 21001 union requête pour code_com 21001
Et plutôt utiliser une boucle à partir de mes code_com : de 21001 à 21005 avec un pas de 1,
mais je n'ai aucune idée comment faire cela sous postgresql, j'ai bien vu with recursive mais je ne sais pas si cela peut fonctionner dans ce cas et comment cela se met en place ...
Je ne sais pas pas si je suis claire ? ;D
Quelqu'un aurait une idée?
Lea
Hors ligne
#2 23/12/2014 15:19:49
- lea
- Membre
Re : Boucle dans postgresql
Bon il semblerait que j'avance avec:
WITH RECURSIVE t(n) AS (
VALUES (21001)
UNION ALL
SELECT n+1 FROM t WHERE n < 21019
)
select * from (select *, pop+round((select zz1.pop from (select * from table1 where code_district='ZZ' AND code_com='21001')zz1 )*pop_portion) as repart from
(select *,pop/(select s1.sum from (select code_com, sum(pop) from table1 where code_district <> 'ZZ' AND code_com='21001' group by code_com order by code_com)s1) as pop_portion from
(select* from table1 where code_com='21001')com21001 where code_district<>'ZZ' order by code_com, pop) foo) repart1
Mais le message suivant :
ERROR: more than one row returned by a subquery used as an expression
********** Error **********
ERROR: more than one row returned by a subquery used as an expression
SQL state: 21000
Alors que ma requête seule fonctionne ...
Une idée?
Merci d'avance ...
Hors ligne
#3 24/12/2014 01:26:33
- gleu
- Administrateur
Re : Boucle dans postgresql
Je ne sais pas pas si je suis claire ? ;D
Absolument pas :-D
Peut-être qu'en donnant les données en entrées et les données résultats, je pourrais mieux comprendre
Guillaume.
Hors ligne
Pages : 1