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

  1. #1
    Membre du Club 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
    Points : 48
    Points
    48
    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 actif
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    207
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 207
    Points : 237
    Points
    237
    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 du Club 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
    Points : 48
    Points
    48
    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
    Points : 1 197
    Points
    1 197
    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 du Club 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
    Points : 48
    Points
    48
    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
    Points : 1 197
    Points
    1 197
    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.

  7. #7
    Membre du Club 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
    Points : 48
    Points
    48
    Par défaut
    ah ok!!! merci
    je suis encore débutant!!!lol
    J'aimerai juste savoir ce que fait la commande "WITH" !!
    merci

  8. #8
    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
    Points : 1 197
    Points
    1 197
    Par défaut
    Salut,

  9. #9
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 820
    Points
    17 820
    Par défaut
    Ce lien a allumé tous mes alerteurs de sécurité !

  10. #10
    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
    Points : 1 197
    Points
    1 197
    Par défaut
    Citation Envoyé par Waldar Voir le message
    Ce lien a allumé tous mes alerteurs de sécurité !
    J'ai un problème avec mon poste au travail,j'attends que le technicien me le répare.

    Désole.

  11. #11
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 073
    Points
    19 073
    Par défaut
    si c'est un exercice, c'est pas mieux de le faire seul ?

  12. #12
    Membre averti
    Inscrit en
    Novembre 2002
    Messages
    549
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 549
    Points : 436
    Points
    436
    Par défaut
    pour salim

    ta requete en 9iR2 fonctionne également comme pour la 10g
    PpPool

  13. #13
    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
    Points : 1 197
    Points
    1 197
    Par défaut
    Citation Envoyé par PpPool Voir le message
    pour salim

    ta requete en 9iR2 fonctionne également comme pour la 10g
    Oui t'as raison le with c'est à partir de la 9i version --

    Le expressions regulières à partir de la 10g

  14. #14
    Membre du Club 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
    Points : 48
    Points
    48
    Par défaut
    Salut a tous!! me revoila
    Merci pour vos réponses!!
    J'ai une autre petite question: en fait je dois ordonner mes équipes selon le nbre total de leurs points!!! mais y a des equipes qui ont le meme nbre de points donc on regarde la colonne diff(difference de buts)! je ne sais pas est ce que je dois utiliser un order by...???
    j'espere que j'ai été assez clair!! Si qq'un a une petite idéé!! je suis preneur!!
    Merci a vous

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

    Informations forums :
    Inscription : Septembre 2007
    Messages : 207
    Points : 237
    Points
    237
    Par défaut
    Dis, tu ne pourrais pas poster une fois pour toute la problématique au lieu d'en ajouter un morceau à chaque fois.
    Et comme dis précédemment, si c'est un exercice, il serait peut etre bon de réfléchir...
    A moins que les bases de données ne soient pas dans ton plan d'avenir.
    Le jour ou tu seras en poste, on attendra autre choses que quelqu'un qui sache écrire sur un forum.

    Laurent

  16. #16
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 073
    Points
    19 073
    Par défaut
    Ce serait pas mal de proposer ta solution et nous expliquer en quoi cela ne convient pas... histoire qu'on s'assure que tu fais un minimum d'effort personnel.

  17. #17
    Membre du Club 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
    Points : 48
    Points
    48
    Par défaut
    salut a tous!!
    dsl pour le retard (problème de connexion).
    merci pour les réponses. En fait j'ai réussi à resoudre le problème sauf que mon code est un peu long!!
    Merci encore

+ 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