Organiser par maximum une table contenant COUNT avec MAX

Résolu
Bonjour, j'ai la base suivante :
FONCTION (Numfonct, libfonct, salaire)
SERVICE (Numserv,libserv)
EMPLOYE (Numemp, nom, prenom,numfonct,numserv)

Je voudrai afficher pour chaque service, la fonction dont le nombre d'employés l'occupant est le plus grand.
Voici ma démarche :
J'ai la requête suivante :
SELECT libserv,libfonct, COUNT(numemp) 
FROM EMPLOYE INNER JOIN SERVICE ON EMPLOYE.NUMSERV=SERVICE.NUMSERV INNER JOIN FONCTION ON EMPLOYE.NUMFONCT=FONCTION.NUMFONCT
GROUP BY libserv, libfonct
ORDER BY libserv;
qui me donne les services, les fonctions ainsi que leur nombre d'employé respectif. Mais je voudrai pouvoir organiser ces données pour n'avoir que le maximum des de chaque service, mais je ne sais pas comment faire ?!
Je vous remerci de m'aider



pense à ta vie et pense à l'eternité

1 réponse

  1. Bonjour,

    je ne suis pas certaine que çà marche mais essayez ceci

    SELECT libserv,libfonct, COUNT(numemp)
    FROM EMPLOYE INNER JOIN SERVICE ON EMPLOYE.NUMSERV=SERVICE.NUMSERV INNER JOIN FONCTION ON EMPLOYE.NUMFONCT=FONCTION.NUMFONCT
    GROUP BY libserv, libfonct,
    order by count(*) desc limit 1
    0
    1. Désolé ça ne marche pas ;(. En plus Oracle ne prend pas en charge "limit"
      0
    2. ça y est, j'ai trouvé la solution, c'est :
      select libfonct,libserv,count(numemp) 
      from ((employe natural join service s1) natural join fonction f1)
      group by libserv,libfonct
      having count(numemp)=(select max(count(numemp)) from ((employe natural join service) natural join fonction)
      where libfonct=f1.libfonct group by libserv,libfonct);


      Et ça fonctionnent nickelement
      0