Partage
  • Partager sur Facebook
  • Partager sur Twitter

Besoins d'aide pour une question

    13 novembre 2017 à 17:34:51

    Bonjour,

    J'aurais besoins d'aide pour une question en SQL sauf que j'arrive pas à faire la requête. Enfaite je dois le faire avec le C# mais je maitrise le C# mais pas le SQL avec les jointures

    Question : Liste des employés diplomés (numéro, nom, prenom, nombre de diplômes) qui se trouvent dans un service de plus de n personnes. (requête).

    SERVICE (ser_id(P),ser_designation,ser-type,ser_produit,ser-capacité,ser_budget)

    EMPLOYE (emp_id(P),emp_nom,emp_prenom,emp_sexe,emp_cadre,emp_salaire,#emp_service)

    DIPLOME (dip_id(P),dip_libelle)

    POSSEDER (#pos_diplome(P),#pos_employe(P))

    (P) = clé primaire

    # = clé étrangère

    Contenu des tables

    • Partager sur Facebook
    • Partager sur Twitter
      13 novembre 2017 à 18:07:16

      Bonjour,

      SébastienBunel a écrit:

      Liste des employés diplomés (numéro, nom, prenom, nombre de diplômes) qui se trouvent dans un service de plus de n personnes.

      Commencer par la liste des services ayant plus de n personnes :

      -- Services de plus de n personnes
      SELECT emp_service
      FROM employe
      GROUP BY emp_service
      HAVING COUNT(*) > n

      Après trouver la liste des employés diplômés :

      SELECT DISTINCT E.*
      FROM
          employe E
      		INNER JOIN posseder P
      			ON E.emp_id = P.pos_employe

      Et enfin regrouper le tout :

      SELECT DISTINCT E.*
      FROM
          employe E
      		INNER JOIN posseder P
      			ON E.emp_id = P.pos_employe
              INNER JOIN (
                      -- Services de plus de n personnes
                      SELECT emp_service
                      FROM employe
                      GROUP BY emp_service
                      HAVING COUNT(*) > n
                  ) S
                  ON E.emp_service = S.emp_service

      Remplacer ici n par la valeur souhaitée.

      Si n doit être une variable, il faudra passer par une procédure ...

      -
      Edité par Benzouye 13 novembre 2017 à 18:11:41

      • Partager sur Facebook
      • Partager sur Twitter
      Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL
        13 novembre 2017 à 18:19:16

        d'accord merci beeaucoups, par contre j'essaie de trouver le nombre de diplome qui ont chaque employé avec la requete que tu ma passé sauf que ca me met "Subquery returns more than 1 row" quand je met la sous requete dans le select par contre comme j'enlève le groupby il me met 15 diplôme à tous les employés

        SELECT emp_id,emp_nom,emp_prenom,(select count(pos_diplome) from posseder group by pos_employe) as NombreDiplome

        FROM

            employe E

                INNER JOIN (

                        SELECT emp_service

                        FROM employe

                        GROUP BY emp_service

                        HAVING COUNT(*) > 2

                    ) S

                    ON E.emp_service = S.emp_service

        • Partager sur Facebook
        • Partager sur Twitter
          14 novembre 2017 à 8:57:33

          SébastienBunel a écrit:

          le nombre de diplome qui ont chaque employé

          Il ne faut jamais (enfin autant que possible) faire de SELECT imbriqué, et en plus ici ton SELECT imbriqué retourne plusieurs lignes d'où l'erreur ...

          Si le besoin est "Le nombre de diplômes par employé travaillant dans un service de plus de 2 personnes", alors la requête serait :

          SELECT
          	E.emp_id,
          	E.emp_nom,
          	E.emp_prenom,
          	E.emp_sexe,
          	E.emp_cadre,
          	E.emp_salaire,
          	E.emp_service,
          	S.ser_designation,
          	COUNT(*) AS nb_diplomes
          FROM
          	employe E
          		INNER JOIN (
          				-- Services de plus de 2 personnes
          				SELECT emp_service
          				FROM employe
          				GROUP BY emp_service
          				HAVING COUNT(*) > 2
          			) S
          			ON E.emp_service = S.emp_service
          		INNER JOIN service S
          			ON E.emp_service = S.ser_id
          		INNER JOIN posseder P
          			ON E.emp_id = P.pos_employe
          GROUP BY
          	E.emp_id,
          	E.emp_nom,
          	E.emp_prenom,
          	E.emp_sexe,
          	E.emp_cadre,
          	E.emp_salaire,
          	E.emp_service,
          	S.ser_designation

          Il te faudrait quand même un peu te former au SQL ... Cf. cours MySQL dans ma signature ;)

          • Partager sur Facebook
          • Partager sur Twitter
          Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL

          Besoins d'aide pour une question

          × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
          × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
          • Editeur
          • Markdown