Compter enregistrements différents dans un GROUP BY

Compter enregistrements différents dans un GROUP BY - SQL/NoSQL - Programmation

Marsh Posté le 16-11-2010 à 11:40:28    

Bonjour,
 
Je travaille sous Oracle, et j'aurai besoin d'un coup de main sur une requête.
J'ai une table qui recense des employés suivant leur pays, ville, batiment et statut.
Dans un premier temps, j'arrive à récupérer les données suivantes : pays/ville/batiment/statut/nombre d'employés ayant ce statut.
 
Voici ma table :

Code :
  1. Prénom    Pays     Ville   Batiment   Statut
  2. --------------------------------------------
  3. Jean      France   Paris   B1         Ing
  4. Jacques   France   Paris   B1         Tech
  5. Amélie    France   Paris   B1         Ing
  6. Audrey    France   Paris   B2         Ing
  7. John      UK       London  B4         Ing
  8. Kate      UK       London  B5         Ing


Voici ma requête :

Code :
  1. select pays, ville, batiment, statut, count(prénom)
  2. from ma_table
  3. group by pays, ville, batiment, statut;


Voici le résultat :

Code :
  1. France / Paris / B1 / Ing / 2
  2. France / Paris / B1 / Tech / 1
  3. France / Paris / B2 / Ing / 1
  4. UK / London / B4 / Ing / 1
  5. UK / London / B5 / Ing / 1


Ce que je voudrais avoir en plus, c'est le nombre d'enregistrements "différents" pour les couples (pays/ville).
Grosso modo, la requête devrait renvoyer en dernière colonne ce nombre:

Code :
  1. France / Paris / B1 / Ing / 2 / 3
  2. France / Paris / B1 / Tech / 1 / 3
  3. France / Paris / B2 / Ing / 1 / 3
  4. UK / London / B4 / Ing / 1 / 2
  5. UK / London / B5 / Ing / 1 / 2


Comme dans mon group by je mets les colonnes batiment et statut, je ne sais pas si ce que je veux faire est réalisable de cette manière...
Merci pour votre aide :)


Message édité par electricblue le 16-11-2010 à 11:43:23
Reply

Marsh Posté le 16-11-2010 à 11:40:28   

Reply

Marsh Posté le 20-11-2010 à 20:38:34    

Salut,  
 
J'ai pas de base Oracle sous la main pour tester, mais à mon avis, une petite fonction analytique fera l'affaire. A priori, le count :  
 
http://lalystar.developpez.com/fonctionsAnalytiques/
 


---------------
Je poste peu, mais c’est parce que je réfléchis beaucoup avant de poster. Ce qui n'empêche pas que la plupart de mes interventions sont navrantes. Mais j’en suis fier.
Reply

Marsh Posté le 22-11-2010 à 09:51:50    

Voilà, je viens de tester, et c'est bien ça :  
 
select pays, ville, batiment, statut, count(prenom),
       count(*) over (partition by pays, ville)
from matable
group by pays, ville, batiment, statut;


---------------
Je poste peu, mais c’est parce que je réfléchis beaucoup avant de poster. Ce qui n'empêche pas que la plupart de mes interventions sont navrantes. Mais j’en suis fier.
Reply

Marsh Posté le 06-12-2010 à 16:35:15    

Désolé pour cette réponse tardive, et merci beaucoup pour ta solution!!
Je suis parti sur autre chose depuis, mais je teste ça et je te fais un retour dès que possible :)

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed