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

Requêtes MySQL Discussion :

utiliser champ "as" pour calcul


Sujet :

Requêtes MySQL

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Février 2007
    Messages
    757
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 757
    Points : 208
    Points
    208
    Par défaut utiliser champ "as" pour calcul
    bonjour,
    J'ai deux tables :
    Enquetes(Code_Enq,EH....);
    Critères(Code_Enq,Code_Note,....);
    pas trés important d'ailleurs vu le probblème; j'ai écris une requête en créant un champ temp "AS" et je voudrais utiliser ce champ dans une autre requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    SELECT TCRT.CRT_C_CODE_NOTE, TCRT.CRT_C_CODE_COEFF, TCRT.CRT_C_CODE_NOTE * TCRT.CRT_C_CODE_COEFF AS "/20"
    FROM TCRT
    WHERE TCRT.CRT_C_CODE_ENQ
    IN (
    SELECT TENQ.ENQ_C_CODE_ENQ
    FROM TENQ, TCRT
    WHERE TENQ.ENQ_C_CODE_ENQ = TCRT.CRT_C_CODE_ENQ
    AND TENQ.ENQ_L_EH LIKE '%toto');
    J'ai besoin d'utiliser le champ nommé "/20" pour un calcul de total : Coeff X "/20" et je ne sais pas faire si quelqu'un peut m'aider.
    MERCI

  2. #2
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    1) Les champs sont à la campagne ou dans les formulaires, pas dans les tables SQL qui ne sont composées que de colonnes et de lignes.

    2) Les jointures s'écrivent depuis 20 ans avec l'opérateur JOIN ; il serait temps de s'y mettre !

    3) Tu peux expliquer en français ce qu'est censée faire la requête ?
    Ta sous-requête ne retient que les enquêtes ayant des critères pour le ENQ_L_EH LIKE '%toto'.
    Toutes les enquêtes n'ont-elles pas des critères ?
    Autrement dit, la jointure avec TRCT est-elle vraiment utile dans la sous-requête ?
    Comme en plus ton IN est équivalent à une jointure entre TRCT et la sous-requête, je doute fortement de l'utilité de la jointure dans la sous-requête !

    Voici ta requête récrite :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    SELECT TCRT.CRT_C_CODE_NOTE,
    	TCRT.CRT_C_CODE_COEFF,
    	TCRT.CRT_C_CODE_NOTE * TCRT.CRT_C_CODE_COEFF AS "/20"
    FROM TCRT
    INNER JOIN 
    (
    	SELECT TENQ.ENQ_C_CODE_ENQ
    	FROM TENQ
    	INNER JOIN TCRT ON TENQ.ENQ_C_CODE_ENQ = TCRT.CRT_C_CODE_ENQ
    	WHERE TENQ.ENQ_L_EH LIKE '%toto'
    ) tmp ON tmp.TENQ.ENQ_C_CODE_ENQ = TCRT.CRT_C_CODE_ENQ
    Cette requête ne serait-elle pas suffisante ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT TCRT.CRT_C_CODE_NOTE,
    	TCRT.CRT_C_CODE_COEFF,
    	TCRT.CRT_C_CODE_NOTE * TCRT.CRT_C_CODE_COEFF AS note_ponderee
    FROM TCRT
    INNER JOIN TENQ ON TENQ.ENQ_C_CODE_ENQ = TCRT.CRT_C_CODE_ENQ
    WHERE TENQ.ENQ_L_EH LIKE '%toto'
    Rien ne t'empêche ensuite d'en faire une vue ou une sous-requête dans une autre requête.

    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    CREATE VIEW v_notes AS
    SELECT TCRT.CRT_C_CODE_NOTE,
    	TCRT.CRT_C_CODE_COEFF,
    	TCRT.CRT_C_CODE_NOTE * TCRT.CRT_C_CODE_COEFF AS note_ponderee
    FROM TCRT
    INNER JOIN TENQ ON TENQ.ENQ_C_CODE_ENQ = TCRT.CRT_C_CODE_ENQ
    WHERE TENQ.ENQ_L_EH LIKE '%toto';
     
    SELECT AVG(note_ponderee) AS moyenne
    FROM v_notes;
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  3. #3
    Membre expert
    Avatar de ericd69
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2011
    Messages
    1 919
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 919
    Points : 3 295
    Points
    3 295
    Billets dans le blog
    1
    Par défaut
    salut,

    tu peux utiliser des variables globales
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    select @a:=15+5,@b:=18,@a+@b;
    ce qui ne t'empèche pas de donner un alias aux colonnes
    la lecture se fait de gauche à droite...
    si une variable n'est pas affectée elle contient nulle sinon sa valeur précédente donc bien penser à ça si tu veux utiliser cette technique entre 2 ligne consécutives... ça peut jouer des tours...
    soyons pensez à mettre quand votre problème est résolu ou à utiliser pour les réponses pertinentes...
    ne posez pas de problématique soi-disant simplifiée sur des problèmes que vous n'êtes pas capable de résoudre par respect pour ceux qui planchent dessus... sinon: et à utiliser pour insérer votre code...

  4. #4
    Membre actif
    Profil pro
    Inscrit en
    Février 2007
    Messages
    757
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 757
    Points : 208
    Points
    208
    Par défaut réponse à ericd69 et à CinePhil
    Citation Envoyé par ericd69 Voir le message
    salut,

    tu peux utiliser des variables globales
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    select @a:=15+5,@b:=18,@a+@b;
    ce qui ne t'empèche pas de donner un alias aux colonnes
    la lecture se fait de gauche à droite...
    si une variable n'est pas affectée elle contient nulle sinon sa valeur précédente donc bien penser à ça si tu veux utiliser cette technique entre 2 ligne consécutives... ça peut jouer des tours...
    Merçi à vous deux pour vos réponses en fait la réponse était simple un simple champ calculé "AS" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    SELECT TCRT.CRT_C_CODE_NOTE, TCRT.CRT_C_CODE_COEFF, TCRT.CRT_C_CODE_NOTE *5 AS "  /20",TCRT.CRT_C_CODE_COEFF * TCRT.CRT_C_CODE_NOTE *5 as "Total"
    FROM TCRT
    WHERE TCRT.CRT_C_CODE_ENQ
    IN (
    SELECT TENQ.ENQ_C_CODE_ENQ
    FROM TENQ, TCRT
    WHERE TENQ.ENQ_C_CODE_ENQ = TCRT.CRT_C_CODE_ENQ
    AND TENQ.ENQ_L_EH LIKE '%Bordeaux'
    ) order by CRT_C_CODE_TYPE_CRITERE;
    Maintenant je souhaiterais faire des totaux par Code Critère(CRT_C_CODE_TYPE_CRITERE) j'ai écris cette requete :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    SELECT sum( TCRT.CRT_C_CODE_COEFF ) , TCRT.CRT_C_CODE_TYPE_CRITERE, TCRT.CRT_C_CODE_NOTE, TCRT.CRT_C_CODE_COEFF, TCRT.CRT_C_CODE_NOTE *5 AS "  /20", TCRT.CRT_C_CODE_COEFF * TCRT.CRT_C_CODE_NOTE *5 AS "Total"
    FROM TCRT
    WHERE TCRT.CRT_C_CODE_ENQ
    IN (
     
    SELECT TENQ.ENQ_C_CODE_ENQ
    FROM TENQ, TCRT
    WHERE TENQ.ENQ_C_CODE_ENQ = TCRT.CRT_C_CODE_ENQ
    AND TENQ.ENQ_L_EH LIKE '%Bordeaux'
    )
    group BY TCRT.CRT_C_CODE_TYPE_CRITERE;
    sum par critère code type critère code note code coeff /20 total
    8 1 3 5 15 75
    10 2 3 3 15 45
    19 3 2 5 10 50
    NULL 4 NULL NULL NULL NULL
    c'est pas mal mais je voudrais que les totaux soient dessous les code coeff
    si vous avez des idées merçi .
    A+

  5. #5
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Merçi à vous deux pour vos réponses
    Mais tu n'as pas tenu compte des remarques et requêtes qu'on t'a données.

    Tu n'as pas vraiment répondu non plus à la question que j'ai posée :
    3) Tu peux expliquer en français ce qu'est censée faire la requête ?
    Je parlais bien entendu de la requête que tu avait postée et qui me faisait un peu mal aux yeux !
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  6. #6
    Membre actif
    Profil pro
    Inscrit en
    Février 2007
    Messages
    757
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 757
    Points : 208
    Points
    208
    Par défaut réponse à CinePhil
    Citation Envoyé par CinePhil Voir le message
    Mais tu n'as pas tenu compte des remarques et requêtes qu'on t'a données.

    Tu n'as pas vraiment répondu non plus à la question que j'ai posée :

    Je parlais bien entendu de la requête que tu avait postée et qui me faisait un peu mal aux yeux !
    *************************************************
    oui en général je suis plus précis dans mes questions et réponses mais là je suis en stage et je manque de temps...
    Voilà la requête permet de calculer le champ "/20" (transformation de la note X 5) puis le champ "Total" (multiplication du champ "Coeff" par le champ "/20" soit Coeff X Note X 5).
    Coeff Note /20 Total
    3 3 15 45,00
    5 2 10 50,00
    5 3 15 75,00
    total coeff 13 13,07 170,00


    J'espère avoir été plus clair merçi encore pour ton aide.
    A +

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