IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SQL Oracle Discussion :

Requête select where


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de comrad85
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    188
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 188
    Par défaut Requête select where
    bonjour a tous!!
    j'ai un petit souci en ce moment.Je vous explique:
    j'ai une table qui comporte:equipe,points........ (14 equipe)
    je veux creer une vue qui comporte le "nom" de l'equipe et le nbre de match gagnés (point=3). j'ai essayé de faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    create or replace view vue1 as select equipe, count(points) from match
    where points=3
    group by equipe
    le problème est qu'il y a des equipes qui n'ont pas gagné. mais j'arrive pas à les afficher.
    j'espere que j'ai été assez clair!!
    Merci a vous

  2. #2
    Membre expérimenté
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    207
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 207
    Par défaut
    Bonjour,

    Dans ta table le nombre de points c'est le nombre de points total ou pour chaque victoire tu as équipe et trois points ou 0 pour défaite et 1 pour nul

    Ex:
    Equipe points
    BORDEAUX 3
    BORDEAUX 3
    PARIS 0
    PARIS 0
    PARIS 3
    BORDEAUX 0
    MARSEILLE 0
    MARSEILLE 0
    MARSEILLE 0

    Dans ce cas tu peux faire quelque chose comme ca;

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    select * from (
    select equipe, count(*) from match
    where point=3
    group by equipe
    union select equipe,0 from match
    group by equipe
    having sum(point)=0)
    order by 2 desc

    Le hic, c'est que ca fonctionne uniquement si tu n'as pas de matches null.
    Si tu gères les matches null tu peux tenter ca:

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    select * from (
    select equipe, count(*) from match
    where point=3
    group by equipe
    union select equipe,0 from match m
    where point in (1,0) and not exists (select 1 from match where m.equipe=match.equipe and match.point=3))
    order by 2 desc;

    Mais si je puis me permettre pourquoi ne pas stocker directement l'information victoire et créer une vue avec un calcul nb_victoire*3 pour avoir le nombre de points.



    Laurent.

    My ORACLE BLOG => http://lao-dba.over-blog.com/

  3. #3
    Membre confirmé Avatar de comrad85
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    188
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 188
    Par défaut
    merci pour la réponse!!
    ca marche avec ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT * FROM (
    SELECT equipe, count(*) FROM match
    WHERE point=3
    GROUP BY equipe
    union SELECT equipe,0 FROM match m
    WHERE point IN (1,0) AND NOT EXISTS (SELECT 1 FROM match WHERE m.equipe=match.equipe AND match.point=3))
    ORDER BY 2 DESC;
    et ça marche.
    j'aimerai juste afficher "nbre match gagnés" et "nbre match nul" avec la même requete!!
    merci!!

  4. #4
    Rédacteur

    Homme Profil pro
    Développeur et DBA Oracle
    Inscrit en
    Octobre 2006
    Messages
    878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur et DBA Oracle

    Informations forums :
    Inscription : Octobre 2006
    Messages : 878
    Par défaut
    Salut,
    Qu'elle est ta version ??

    Voici une solution avec la 10g
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    SQL> select * from match order by 1,2;
     
    EQUIPE                   POINTS
    -------------------- ----------
    BORDEAUX                      0
    BORDEAUX                      3
    BORDEAUX                      3
    MARSEILLE                     0
    MARSEILLE                     0
    MARSEILLE                     0
    MARSEILLE                     1
    MARSEILLE                     1
    MARSEILLE                     3
    MARSEILLE                     3
    PARIS                         0
     
    EQUIPE                   POINTS
    -------------------- ----------
    PARIS                         0
    PARIS                         3
     
    13 rows selected.
     
    SQL> WITH m  AS (
      2      SELECT equipe , points , case when points =3 then 'Victoire'
      3                                    when points=1 then 'Null'
      4                                   else 'Defaite' end resultat
      5      FROM match)
      6      SELECT  DISTINCT equipe ,resultat, count(*)over(partition BY equipe,resultat) Nombre FROM m
     
      7      ORDER BY 1,2 ;
     
    EQUIPE               RESULTAT     NOMBRE
    -------------------- -------- ----------
    BORDEAUX             Defaite           1
    BORDEAUX             Victoire          2
    MARSEILLE            Defaite           3
    MARSEILLE            Null              2
    MARSEILLE            Victoire          2
    PARIS                Defaite           2
    PARIS                Victoire          1
     
    7 rows selected.
     
    SQL>
    Solution avec la 9i

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
     
    SQL> SELECT  DISTINCT equipe ,resultat, count(*)over(partition BY equipe,resultat) Nombre 
      2   FROM (
      3      SELECT equipe , points , case when points =3 then 'Victoire'
      4                                    when points=1 then 'Null'
      5                                   else 'Defaite' end resultat
      6      FROM match)
      7      ORDER BY 1,2 ;
     
    EQUIPE               RESULTAT     NOMBRE
    -------------------- -------- ----------
    BORDEAUX             Defaite           1
    BORDEAUX             Victoire          2
    MARSEILLE            Defaite           3
    MARSEILLE            Null              2
    MARSEILLE            Victoire          2
    PARIS                Defaite           2
    PARIS                Victoire          1
     
    7 rows selected.
     
    SQL>

  5. #5
    Membre confirmé Avatar de comrad85
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    188
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 188
    Par défaut
    j'utilise la version 11g!! c la même chose que 10g?????
    En fait les codes que tu m'as écrit c'est en PL/SQL (enfin je crois )!! or c'est un exercice que je dois faire uniquement en sql!
    merci

  6. #6
    Rédacteur

    Homme Profil pro
    Développeur et DBA Oracle
    Inscrit en
    Octobre 2006
    Messages
    878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur et DBA Oracle

    Informations forums :
    Inscription : Octobre 2006
    Messages : 878
    Par défaut
    Citation Envoyé par comrad85 Voir le message
    j'utilise la version 11g!! c la même chose que 10g?????
    En fait les codes que tu m'as écrit c'est en PL/SQL (enfin je crois )!! or c'est un exercice que je dois faire uniquement en sql!
    merci
    Salut,

    C'est pas du PLSQL mais c'est du pur sql, tu es avec la 11g donc ca ne posera pas de problème.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. requête SELECT WHERE idiote
    Par létudiant_access dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 22/01/2012, 14h08
  2. [MySQL] Requête SELECT WHERE IN ensemble
    Par UnknownMan dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 18/11/2011, 00h38
  3. [AC-2003] Requête :SELECT WHERE TABLE1_champ1 LIKE *TABLE2champ2*
    Par mitinou dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 15/04/2011, 10h26
  4. [MySQL] Erreur sur une requête select where
    Par Goffer dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 04/01/2009, 08h45
  5. PB sur requête SELECT WHERE SELECT
    Par aliochai dans le forum Requêtes
    Réponses: 2
    Dernier message: 03/03/2008, 15h59

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo