Forum Programmation.SQL requête sql

Posté par  .
Étiquettes : aucune
0
14
juin
2007
bonjour,

je cherche à écrire une requête sql assez proche de celle qu'on peut trouver là -> http://sqlcourse2.com/groupby.html
à savoir :

SELECT max(salary), dept
FROM employee
GROUP BY dept;

qui retourne la liste des salaires les plus élevés dans chaque département. Ce que je veux c'est également obtenir le nom de ceux à qui correspondent ces salaires.
La requète suivante

SELECT lastname, max(salary), dept
FROM employee
GROUP BY dept;

ne retourne évidemment pas le nom qui correspond au salaire maximum et pourtant c'est ce que je voudrait

voilà. Si quelqu'un à une solution à me proposer je le remercie par avance
  • # Re: requête SQL

    Posté par  . Évalué à 2.

    C'est pas très beau, mais ça devrait marcher :


    SELECT dept, salary, lastname
    FROM employee A
    WHERE (dept, salary) =
        (SELECT dept, salary
        FROM employee B
        WHERE A.deptv = B.dept
        GROUP BY dept)


    Bonne chance
    • [^] # Re: requête SQL

      Posté par  . Évalué à 3.

      Oops, j'ai oublié le MAX au 2ème SELECT ...

      SELECT dept, salary, lastname
      FROM employee A
      WHERE (dept, salary) =
          (SELECT dept, MAX(salary)
          FROM employee B
          WHERE A.deptv = B.dept
          GROUP BY dept)
      • [^] # Re: requête SQL

        Posté par  . Évalué à 1.


        WHERE (dept, salary) =
        (SELECT dept, MAX(salary)
        ...


        j'ignorais qu'on pouvait faire des comparaisons sur des n-uplets comme ça. D'ailleurs ça marche pas sur le site web ou j'ai pris l'exemple (peut-être une limitation). Vais regarder ça de plus près.
        merci
        • [^] # Re: requête SQL

          Posté par  . Évalué à 1.

          apparemment cela ne fonctionne que sur des bases de données oracles :(
          • [^] # Re: requête SQL

            Posté par  . Évalué à 1.

            Pourtant je l'ai testé sur une serveur MySQL 5.0.32-Debian_7etch1-log et elle marchait !
    • [^] # Re: requête SQL

      Posté par  . Évalué à 2.

      Avec HAVING plutôt...

      SELECT lastname, salary, dept
      FROM employee
      GROUP BY dept
      HAVING salary = MAX(salary)
      • [^] # Re: requête SQL

        Posté par  . Évalué à 1.

        c'est pas exactement ce que je veux:

        Avec la table suivante:

        dept....lastname.....salary
        1..........joe................100.00
        1..........william.........50.00
        2..........jack...............30.00
        2..........averell..........80.00

        SELECT lastname, salary, dept
        FROM employee
        GROUP BY dept

        va retourner

        1..........joe................100.00
        2..........jack...............30.00

        et

        SELECT lastname, salary, dept
        FROM employee
        GROUP BY dept
        HAVING salary = MAX(salary)

        va retourner

        1..........joe................100.00

        là ou salary est effectivement égal au salaire max du departement mais sur le resultat de la requete sans le having

        ce que je veux obtenir c'est

        1..........joe................100.00
        2..........averell..........80.00

        c'est presque ça :) merci
  • # Manque une partie dans le group by...

    Posté par  . Évalué à 2.

    Ta seconde requête devrait s'écrire comme suit :

    SELECT lastname, max(salary), dept

    FROM employee

    GROUP BY lastname, dept;

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.