Partage
  • Partager sur Facebook
  • Partager sur Twitter

SQL sous Oracle

    29 juillet 2010 à 20:11:12

    Bonsoir voilà j'ai 3 tables

    CREATE TABLE Journees
    (Competition NUMBER(2),
     Annee NUMBER(4), 
     -- Annee doit ˆtre = … Annee de DateHeureCompetition
     Jour NUMBER(1), 
     -- Jour >= 1 et <=  nbjour de la table Organisateurs
     DateHeureCompetition DATE
    	CONSTRAINT JourneesDateHeureCompetition CHECK (DateHeureCompetition IS NOT NULL),
     HeureEchauffement DATE,
    	CONSTRAINT JourneesHeureEchauffement CHECK (HeureEchauffement IS NOT NULL),  
     Piscine NUMBER(2)
    	CONSTRAINT RefJourneesPiscines REFERENCES Piscines (Piscine)
    	CONSTRAINT PiscineNotNull CHECK (Piscine IS NOT NULL), 
     Juge NUMBER (2)
     	CONSTRAINT RefJourneesJuges REFERENCES Juges (Juge),
     DateLimiteInscription DATE,	
     CONSTRAINT CpJournees PRIMARY KEY (Competition,Annee,Jour),
     CONSTRAINT RefJourneesCompetitions FOREIGN KEY (Competition,Annee) 
      REFERENCES Organisateurs (Competition,Annee)
      );
    
    CREATE TABLE Planning
    (Competition NUMBER(2),
      Annee NUMBER(4),
     Jour NUMBER(1),
     Course NUMBER(2), 
     Libelle VARCHAR2(100),
     Distance NUMBER(4),
     Pause CHAR(1),
      CONSTRAINT CpPlanning PRIMARY KEY (Competition,Annee,Jour,Course),
      CONSTRAINT RefPlanningJournees FOREIGN KEY (Competition,Annee,Jour)
           REFERENCES Journees (Competition,Annee,Jour)
    );
    
    CREATE TABLE Competitions
    ( Competition NUMBER(2) 
     	CONSTRAINT CpCompetition PRIMARY KEY,
     Libelle VARCHAR2(40),
     Organisateur VARCHAR2(100)
     );
    


    Et je souhaites trouver la compétition qui a organisé plus de 15 courses sur une journée

    J'ai crée ma requête et je n'arrive pas à la compléter :

    select jour,libelle
    from
    (
    	select planning.jour,competitions.libelle,count(course) as nCourse
    	from planning,competitions,journees
    	where planning.competition = journees.competition
    	and planning.annee = journees.annee
    	and planning.jour = journees.jour
    	and journees.competition = competitions.competition
    	group by competitions.libelle,planning.jour
    )
    where nCourse > 15;
    


    Merci de bien m'aider

    PS : SQL sous Oracle
    • Partager sur Facebook
    • Partager sur Twitter
      31 juillet 2010 à 1:04:46

      Je suis pas du tout expert en SQL mais ça ressemble pas plutôt à un truc de ce genre en utilisant les jointures ?

      la compétition qui a organisé plus de 15 courses sur une journée

      SELECT Competition, count(course) as nbCourse, count(Jour) as nbJour
      FROM Competitions
      INNER JOIN Planning
      ON Competitions.Competition
      INNER JOIN Journees
      ON Competitions.Competition
      WHERE nbCourse > 15 AND nbJour = 1
      
      • Partager sur Facebook
      • Partager sur Twitter
        31 juillet 2010 à 11:53:56

        Pour filtrer sur les résultats d'un GROUP BY il faut utiliser HAVING, exemple SELECT blabla, count(*) AS total FROM ... HAVING total > 10
        • Partager sur Facebook
        • Partager sur Twitter
          2 août 2010 à 11:17:29

          Si les "libelle" de planning et competitions sont égaux, ça devrait ressembler à ça:
          SELECT
              c.competition
          FROM
              Journees j,
              Planning p,
              Competitions c
          WHERE
              p.Course > 15
              AND j.jour = '1'
              AND j.competition = p.competition
              AND p.comptition = c.competition
              AND p.libelle = c.libelle
              AND j.annee = c.annee
              AND j.jour = c.annee
          


          @+
          • Partager sur Facebook
          • Partager sur Twitter

          SQL sous Oracle

          × 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