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

MySQL Discussion :

tri de donnée mysql


Sujet :

MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Alternant BTS Développement
    Inscrit en
    Octobre 2015
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Alternant BTS Développement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2015
    Messages : 14
    Par défaut tri de donnée mysql
    Bonjour à tous,

    J'ai un soucis quand à réaliser une requète MySQL pour faire un tri dans mes données:

    Explication: je dois afficher tous les candidats qui ont eu une note en dessous de 14 pour les épreuves '001','002','003' et qui ont Aussi eu une note inférieure à 7 pour les épreuves '007','008','301','302','303','304'.

    J'ai commencé à tester des solutions pour une condition mais les résultats ne sont pas la..

    Description des Tables

    cnd_epr : table des épreuves
    num_can : numéro d candidat
    cod_epr : le code de l'épreuve
    not_epr : la note obtenue à l'épreuve

    quelque test pour vous aider a comprendre mon problème:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    SELECT candidat,
    notes001,
    notes002
     
     FROM (
    SELECT DISTINCT (cnd_epr.num_can) AS candidat,
           CASE cnd_epr.cod_epr WHEN  '001' 
               THEN cnd_epr.not_epr END  AS note001,
           CASE cnd_epr.cod_epr WHEN  '002' 
               THEN cnd_epr.not_epr END  AS note002
     
          FROM cnd_epr 
          ) AS triage
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Select DISTINCT cnd_epr.num_can
    FROM
    (
    SELECT DISTINCT (cnd_epr.num_can) AS candidat,
           CASE  WHEN  cnd_epr.cod_epr IN ('001', '002', '003')  
               THEN cnd_epr.not_epr END  AS notegroupa
     
          FROM cnd_epr 
     ) AS s1
      WHERE cnd_epr.exa_men = 'dnbo' 
    	AND cnd_epr.exa_typ = 'dnb006' 
    	AND cnd_epr.exa_ann = '2015' 
    	AND cnd_epr.exa_ses = '06'
        AND notegroupa < 14
    Y'a t il quelqu'un qui pourrait m'éclaircir, Merci d'avance,
    Cordialement,
    BIGnotor.

  2. #2
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 599
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 599
    Billets dans le blog
    10
    Par défaut
    Bonjour,

    Essayez ceci :

    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
    SELECT num_can,                                                   
           cod_epr,                                                   
           not_epr                                                    
    FROM MA_TABLE MAIN                                                  
    WHERE MAIN.cod_epr IN ( 001 , 002 , 003 )                         
      AND MAIN.not_epr < 14                                           
      AND EXISTS                                                    
        (SELECT 1                                                   
         FROM MA_TABLE SUBQ                                             
         WHERE SUBQ.num_can = MAIN.num_can                              
           AND SUBQ.cod_epr IN ( 007 , 008 , 301 , 302 , 303 , 304 )  
           AND SUBQ.not_epr < 07)
    UNION                                                      
    SELECT num_can,                                              
           cod_epr,                                              
           not_epr                                               
    FROM MA_TABLE MAIN                                             
    WHERE MAIN.cod_epr IN ( 007 , 008 , 301 , 302 , 303 , 304 )  
      AND MAIN.not_epr < 07                                      
      AND EXISTS                                               
        (SELECT 1                                              
         FROM MA_TABLE SUBQ                                        
         WHERE SUBQ.num_can = MAIN.num_can                         
           AND SUBQ.cod_epr IN ( 001 , 002 , 003 )               
           AND SUBQ.not_epr < 14)

  3. #3
    Membre averti
    Homme Profil pro
    Alternant BTS Développement
    Inscrit en
    Octobre 2015
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Alternant BTS Développement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2015
    Messages : 14
    Par défaut
    Bonjour, merci d'avoir répondu,

    à quoi correspond ma table subq ? tout est dans la même tables, juste des colonnes différentes..

    De mon coté j'en suis arrivé à ceci en final.. ca met du temps a s'éxecuter mais ca me sors quelque chose d'assez cohérant, j'approfondirai demain
    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
    SELECT DISTINCT nmn_can, nom_can, pre_can, cnd.num_can 
     
    FROM cnd_epr, 
    (SELECT cnd_epr.num_can, 
    	CASE WHEN cnd_epr.cod_epr = '001' THEN cnd_epr.not_epr < 14 
    		 WHEN cnd_epr.cod_epr = '002' THEN cnd_epr.not_epr < 14 
             WHEN cnd_epr.cod_epr = '003' THEN cnd_epr.not_epr < 14 
             WHEN cnd_epr.cod_epr = '007' THEN cnd_epr.not_epr < 7 
             WHEN cnd_epr.cod_epr = '008' THEN cnd_epr.not_epr < 7 
             WHEN cnd_epr.cod_epr = '301' THEN cnd_epr.not_epr < 7 
             WHEN cnd_epr.cod_epr = '302' THEN cnd_epr.not_epr < 7 
             WHEN cnd_epr.cod_epr = '303' THEN cnd_epr.not_epr < 7 
             WHEN cnd_epr.cod_epr = '304' THEN cnd_epr.not_epr < 7 END 
        FROM cnd_epr) as test001 
    WHERE   cnd.exa_men = 'dnbo' 
    	AND cnd.exa_typ = 'dnb006' 
    	AND cnd.exa_ann = '2015' 
    	AND cnd.exa_ses = '06' 
    	AND cnd.cod_cat = '520' 
        AND cnd_epr.num_can IN 
        (SELECT cnd_epr.num_can 
        FROM cnd_epr
        WHERE   cnd_grp.exa_men = 'dnbo' 
    		AND cnd_grp.exa_typ = 'dnb006' 
    		AND cnd_grp.exa_ann = '2015' 
    		AND cnd_grp.exa_ses = '06' 
    		AND cnd_grp.moy_cal < 9.59  
    		AND cnd_grp.moy_cal > 9 )
     
    	AND cnd.num_can = cnd_grp.num_can 
        AND cnd_grp.num_can = cnd_epr.num_can
    bye

  4. #4
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 599
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 599
    Billets dans le blog
    10
    Par défaut
    SUBQ est juste un alias (un surnom) qui permet de faire une sous-requête (subquery) sur la même table
    de même MAIN est un alias pour désigner cette table dans la requête principale
    On ne peut pas utiliser plusieurs fois une même table dans une requête sans utiliser d'alias

    J'ai testé cette requête avant de vous la proposer, vous pouvez donc l'utiliser telle qu'elle

    EDIT : pensez juste à modifier les prédicats in, dans mon jeu d'essai, j'ai créé la colonne épreuve en numérique, de votre coté, il faut donc ajouter les simples quotes

  5. #5
    Membre averti
    Homme Profil pro
    Alternant BTS Développement
    Inscrit en
    Octobre 2015
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Alternant BTS Développement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2015
    Messages : 14
    Par défaut Requete presque terminée
    j'ai passé la fin de la semaine a essayer d'améliorer cette requete et je n'obtient pas de résultat... je suis en galère encore.. si vous pouviez m'aider encore une fois Merci d'avance
    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
    SELECT DISTINCT nmn_can, nom_can, pre_can, c.num_can 
     
    FROM cnd_epr, cnd c,
     
    	(SELECT num_can, cod_epr, not_epr 
    	FROM cnd_epr a   
    	WHERE a.cod_epr IN ( '001' , '002' , '003' )  
    	    AND a.not_epr < 14 
    	    AND EXISTS 
    		  (SELECT 1  
    		   FROM cnd_epr b  
    		   WHERE b.num_can = a.num_can 
    		       AND b.cod_epr IN ( '007' , '008' , '301' , '302' , '303' , '304' )  
    		       AND b.not_epr < 07) 
           UNION  
    	(SELECT num_can, cod_epr, not_epr 
    	FROM cnd_epr a 
    	WHERE a.cod_epr IN ( '007' , '008' , '301' , '302' , '303' , '304' ) 
    	    AND a.not_epr < 07 
    	    AND EXISTS  
    		  (SELECT 1 
    		   FROM cnd_epr b 
    		   WHERE b.num_can = a.num_can 
    		       AND b.cod_epr IN ( '001' , '002' , '003' ) 
    		       AND b.not_epr < 14)))RQ
     
    WHERE cnd.exa_men = 'dnbo' 
        AND cnd.exa_typ = 'dnb006' 
        AND cnd.exa_ann = '2015' 
        AND cnd.exa_ses = '06' 
        AND cnd.cod_cat = '520' 
        AND EXISTS  
        (SELECT 1 
        FROM cnd_epr c
        WHERE   c.num_can = c.num_can
            AND c.exa_men = 'dnbo' 
    	AND c.exa_typ = 'dnb006' 
    	AND c.exa_ann = '2015' 
    	AND c.exa_ses = '06' 
    	AND c.moy_cal < 9.59  
    	AND c.moy_cal > 9) 
    AND cnd.num_can = cnd_epr.num_can 
    AND cnd_epr.num_can = cnd_grp.num_can

  6. #6
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 599
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 599
    Billets dans le blog
    10
    Par défaut
    Bonjour,

    Je vous ai envoyé la requête qui correspond exactement à votre expression de besoin initial, ici visiblement c'est un nouveau besoin ou une grosse évolution

    Le plus simple est que vous reformuliez votre nouveau besoin fonctionnel, afin que les contributeurs puissent vous proposer une nouvelle solution

Discussions similaires

  1. Tri des données provenant d'une requête mysql
    Par scrappilly dans le forum Langage SQL
    Réponses: 9
    Dernier message: 27/09/2011, 15h19
  2. probleme construction base de donnes MySql...Help
    Par chakan dans le forum Requêtes
    Réponses: 7
    Dernier message: 21/07/2004, 11h27
  3. connection à base de donnée MYSQL
    Par zouzou_zaza dans le forum Bases de données
    Réponses: 11
    Dernier message: 04/07/2004, 12h31
  4. XML->Base de donnée Mysql
    Par lheureuxaurelie dans le forum XQUERY/SGBD
    Réponses: 4
    Dernier message: 10/03/2004, 23h47
  5. [CR9] Tri de données
    Par Madduck dans le forum SAP Crystal Reports
    Réponses: 3
    Dernier message: 24/07/2003, 09h30

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