Annonce
Pour sa 21ème année, l’association GeoRezo a toujours besoin de vous !
10€ = 1 mois de frais bancaires ; 15€ = 12 mois de nom de domaine ; 30€ = 1 semaine de location des serveurs …
Retrouver nos membres bienfaiteurs
#1 Thu 27 April 2023 16:19
- guibouvier
- Participant actif
- Date d'inscription: 23 Jan 2007
- Messages: 104
Requete SQL avec plusieurs COUNT en select
Bonjour
j'ai beau avoir parcouru le tutoriel postgresql, je n'arrive pas à mes fins pour ma requete SQL.
J'ai une table dans laquelle j'ai 15000 dossiers d'urbanisme répartis sur une trentaine de communes.
Je cherche à compter le nombre de dossiers par commune et par type de dossier.
J'ai donc lancé cette requete (qui fonctionne):
Code:
select count (id_dossier), dossiernumtypeentiteappcode ,communeinseecode from dossier d where dossierdatedepot > '2023-01-01' and dossierdatedepot < '2024-01-01' group by communeinseecode, dossiernumtypeentiteappcode order by communeinseecode, dossiernumtypeentiteappcode
J'obtiens ce type de résultats
1 CU 07009
14 DP 07009
3 PC 07009
12 CU 07015
6 DP 07015
1 PA 07015
5 PC 07015
2 CU 07051
6 DP 07051
8 CU 07084
9 DP 07084
Je cherche à obtenir les mêmes informations mais en colonne (type de dossier) avec une ligne par commune
c'est à dire
Code insee Commune / PC / CU / DP
07009 / 3 / 1 / 14
Est ce réalisable ? si oui comment ? peut on mettre plusieurs COUNT dans le SELECT ?
Sur certains forums, on parle de faire plusieurs requetes avec des UNION. J'ai testé mais ça ne permet pas d'obtenir par commune, le nombre de dossiers pour chaque type de dossier.
Merci d'avance pour votre aide
Gui
Hors ligne
#2 Fri 28 April 2023 09:22
- loicbcn
- Participant occasionnel
- Date d'inscription: 22 Jan 2018
- Messages: 26
Re: Requete SQL avec plusieurs COUNT en select
Bonjour,
Il vous faut créer ces colonnes à l'aide de "sum(case when)", en incrémentant quand une condition est remplie ... c'est à dire:
Code:
select communeinseecode, sum(case when dossiernumtypeentiteappcode = 'PC' then 1 else 0 end) PC, sum(case when dossiernumtypeentiteappcode = 'CU' then 1 else 0 end) CU, sum(case when dossiernumtypeentiteappcode = 'DP' then 1 else 0 end) DP from dossier d group by communeinseecode
Dernière modification par loicbcn (Fri 28 April 2023 09:23)
Hors ligne
#3 Fri 28 April 2023 13:42
- guibouvier
- Participant actif
- Date d'inscription: 23 Jan 2007
- Messages: 104
Re: Requete SQL avec plusieurs COUNT en select
Bonjour
Cela fonctionne parfaitement, un grand merci !
Gui
Hors ligne
#4 Fri 28 April 2023 21:08
- Nicolas Ribot
- Membre
- Lieu: Toulouse
- Date d'inscription: 9 Sep 2005
- Messages: 1554
Re: Requete SQL avec plusieurs COUNT en select
Bonsoir,
vous pouvez aussi utiliser l'extension PG tablefunc, qui permet de transposer des lignes en colonnes (equivalent des tableaux croisés dynamiques en Excel): https://www.postgresql.org/docs/15/tablefunc.html
Nicolas
Hors ligne