Partage
  • Partager sur Facebook
  • Partager sur Twitter

SQL problème de requête

Sujet résolu
    29 novembre 2010 à 19:46:59

    Bonsoir,
    j'ai un exercice à faire

    A partir d'une table

    CREATE TABLE emp (
      empno smallint(6) NOT NULL default '0',
      ename varchar(20) NOT NULL default '',
      job varchar(30) NOT NULL default '',
      mgr smallint(6) default NULL,
      hiredate date NOT NULL default '0000-00-00',
      sal smallint(6) NOT NULL default '0',
      comm smallint(6) default NULL,
      deptno smallint(6) NOT NULL default '0',
      PRIMARY KEY  (empno),
      UNIQUE KEY empno (empno)
    ) TYPE
    


    Quelques ligne de la table

    INSERT INTO emp VALUES (7369, 'smith', 'clerk', 7902, '1980-12-17', 800, NULL, 20);
    INSERT INTO emp VALUES (7499, 'allen', 'salesman', 7698, '1981-02-20', 1600, 300, 30);
    INSERT INTO emp VALUES (7521, 'ward', 'salesman', 7698, '1981-02-21', 1250, 500, 30);
    INSERT INTO emp VALUES (7566, 'jones', 'manager', 7839, '1981-04-02', 2975, NULL, 20);
    INSERT INTO emp VALUES (7654, 'martin', 'salesman', 7698, '1981-09-28', 1250, 1400, 30);
    INSERT INTO emp VALUES (7698, 'blake', 'manager', 7839, '1981-05-01', 2850, NULL, 30);
    INSERT INTO emp VALUES (7782, 'clark', 'manager', 7839, '1981-06-09', 2450, NULL, 10);
    INSERT INTO emp VALUES (7788, 'scott', 'analyst', 7566, '1982-12-09', 3000, NULL, 20);
    INSERT INTO emp VALUES (7839, 'king', 'president', NULL, '1981-11-17', 5000, NULL, 10);
    


    Explication sur les colonnes utile
    Signification du nom des colonnes
    EMPNO ->Numéro d'Employé
    ENAME ->Nom Employé
    JOB -> Emploi
    SAL -> Salaire
    MGR -> Numéro du Responsable Hiérarchique

    Par exemple l'employé numéro 7499 à comme manager l'employé 7698


    Sur la multitude de requête a faire il m'en reste deux ou je ne voie par où commencer

    1) Liste alphabétique des responsables et le nombre d'employés directement sous leurs ordres (nom Manager, nb Employés)
    2) Liste alphabétique des Emplois dont l'écart entre le salaire maximum et le salaire moyen est inférieur à l'écart entre le salaire minimum et le salaire moyen (Job, Salaire Min, Salaire Moy, Salaire Max)

    je demande pas la solution directe mais des pistes.

    Yann
    • Partager sur Facebook
    • Partager sur Twitter
      29 novembre 2010 à 20:02:29

      Pour la première, c'est simplement une jointure + COUNT + GROUP BY. La condition de jointure, c'est mgr = empno.

      Pour la deuxième, regarde du côté des fonctions d'agrégat MAX et MIN. Tu vas avoir besoin d'une sous-requête (comme pour ton autre question) qui calcule l'écart entre le salaire minimum et maximum de ta table en entier, puis tu vas inclure cette sous-requête à une requête qui utilisera GROUP BY et encore MAX et MIN.
      • Partager sur Facebook
      • Partager sur Twitter
        29 novembre 2010 à 20:21:03

        Pour la première question je trouve cela

        select t1.ename, count(t1.ename) from emp t1, emp t2
         where t1.empno= t2.mgr group by t2.mgr order by ename
        


        Pour la seconde

        SELECT t1.job,MIN(t1.sal), AVG(t1.sal),MAX(t1.sal)
        FROM emp t1 
        GROUP BY t1.job 
        HAVING (AVG(t1.sal)-MIN(t1.sal)) > ( SELECT (MAX(t2.sal)- avg(t2.sal)) 
        FROM emp t2 WHERE t1.job=t2.job  GROUP BY t2.job) ORDER BY t1.job
        


        Yann
        • Partager sur Facebook
        • Partager sur Twitter
          30 novembre 2010 à 12:07:34

          Salut pour la #1:
          select emp.ename, man.nb from
          (select MGR EMPNO, count(*) nb from emp group by MGR) man
          natural join emp
          


          #2:
          select *
          from (select job, min(sal) mn, avg(sal) av, max(sal) mx from emp group by job) job
          where (job.mx - job.av)  < (job.av - job.mn)
          order by job.job
          


          L'utilisation de vues dynamiques facilite largement tes problèmes.

          Tracker.

          ps: manque t1.ename dans le group by de ta requête n°1.
          • Partager sur Facebook
          • Partager sur Twitter

          SQL problème de requête

          × 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