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

Langage SQL Discussion :

Concaténation de Valeur Numérique


Sujet :

Langage SQL

  1. #1
    Candidat au Club
    Inscrit en
    Juin 2009
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 9
    Points : 4
    Points
    4
    Par défaut Concaténation de Valeur Numérique
    Bonjour,
    je travaille actuellement sur une base de données MySQL 5.0.
    Je voudrais effectuer une requete me permettant de retourner une unité de valeur (tel que %) derrière mon calcul de pourcentage.

    J'ai essayer plusieurs méthodes que se soit avec un "Concat" ou le symbole "+"
    mais a l'affichage, je n'ai ni d'erreur ni l'apparition du symbole voulu.

    Voici ce que j'ai :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    SELECT nom, CONCAT(prenom,' %'), count(personne), CONCAT((count(*)/sum(personne))*100,' %'),
                CONCAT(
                (( count(personne)/(
                SELECT
                SUM(personne)
                FROM
                table1
                ))*100)) + '%' as pourcentage  
     
                FROM table1, table2, table3
                WHERE ..... ..... .....
                GROUP BY personne;
    Le symbole "%" s'affiche bien derrière le prenom mais pas derrière le résultat de ma sous-requête.
    Apparemment, le problème viendrait du type de mon champ qui serait de valeur numérique et qui ne pourrait donc pas être concaténé.

    j'espère avoir été clair, en attente de vos réponses

    je vous remercie d'avance.

  2. #2
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 947
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 947
    Points : 5 846
    Points
    5 846
    Par défaut
    C'est CONCAT et pas +.
    Au pire utilise CAST pour convertir tes numériques en chaînes de caractères mais je ne pense pas que ce soit nécessaire.

  3. #3
    Candidat au Club
    Inscrit en
    Juin 2009
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 9
    Points : 4
    Points
    4
    Par défaut
    Bonjour skuatamad et merci de bien vouloir m'aider.

    J'ai bien utilisé un CONCAT mais aucun affichage du symbole "%".
    Sinon j'ai aussi voulu utiliser un CAST mais le résultat me retourne une erreur de requête SQL lorsque je l'execute.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    SELECT nom, CONCAT(prenom,' %'), count(personne), CONCAT((count(*)/sum(personne))*100,' %'),
                CAST(
                CONCAT( ( count(personne)/( 
                SELECT SUM(personne)
                FROM table1 
                )*100), '%') AS varchar(25) ) AS pourcentage
     
                FROM table1, table2, table3
                WHERE ..... ..... .....
                GROUP BY personne;
    Apparemment, je n'utilise pas correctement le CAST, mais je ne vois pas du tout mon erreur.

  4. #4
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 947
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 947
    Points : 5 846
    Points
    5 846
    Par défaut
    Est ce que CONCAT((count(*)/sum(personne))*100,' %') affiche bien le % ?
    Si oui pas besoin de cast.

    Sinon pour l'autre je l'aurais plutôt écris :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CONCAT( cast( count(personne)/(SELECT SUM(personne) FROM table1) as varchar) , '%')  AS pourcentage

  5. #5
    Membre émérite Avatar de pacmann
    Homme Profil pro
    Consulté Oracle
    Inscrit en
    Juin 2004
    Messages
    1 626
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consulté Oracle
    Secteur : Distribution

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 626
    Points : 2 845
    Points
    2 845
    Par défaut
    Salut !

    Sur le site de MySQL, il disent :
    "Si vous utilisez un nombre dans un contexte de chaîne, le nombre sera automatiquement converti en une chaîne binaire. "

    Aucune autre indication sur ce type de CAST... donc je suppose que l'autocast est effectivement la seule solution

    (c'est ma photo)
    Paku, Paku !
    Pour les jeunes incultes : non, je ne suis pas un pokémon...

    Le pacblog : http://pacmann.over-blog.com/

  6. #6
    Candidat au Club
    Inscrit en
    Juin 2009
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 9
    Points : 4
    Points
    4
    Par défaut
    J'ai testé toutes les possibilitées qui se sont offertes à moi, c'est à dire mettre le CAST avant le CONCAT et inversement mais rien à faire, sa me met toujours "Error executing query."

    Pour répondre à ta question skuatamad, non ce -> CONCAT((count(*)/sum(personne))*100,' %') n'affiche pas non plus le "%"

    Il n'y a que le test que j'ai effectué sur prenom qui semble fonctionner car c'est le seul qui m'affiche le "%".

    Si vous voyez d'autres éventuelles solutions à mon problème, je serais ravi de pouvoir les tester.

    Encore une fois, merci beaucoup pour votre aide.

  7. #7
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 947
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 947
    Points : 5 846
    Points
    5 846
    Par défaut
    Comme signalé par Pacmann, pas de pb pour concatener des nombre et des chaînes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    mysql> select concat(1,'%');
    +---------------+
    | concat(1,'%') |
    +---------------+
    | 1%            |
    +---------------+
    1 row in set (0.00 sec)
    C'est probablement la sous requête dans le concat qu'il n'apprécie pas.
    Essaie avec une autre sous requête :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    select nom, prenom, nb, concat(perc1,' %') as per1,concat(pourcentage,' %') as pourcentage
    from (
         SELECT nom, prenom, count(personne) as nb, (count(*)/sum(personne))*100 as perc1,
                count(personne)/(SELECT SUM(personne) FROM table1)*100 AS pourcentage
           FROM table1, table2, table3
           WHERE ..... ..... .....
           GROUP BY nom, prenom
    );

  8. #8
    Candidat au Club
    Inscrit en
    Juin 2009
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 9
    Points : 4
    Points
    4
    Par défaut
    Merci pour ta proposition de solution skuatamad, j'essaie de résoudre mon problème grâce à ce que tu m'as proposé même si j'avoue m'y perdre un peu avec tout ces "AS" et toutes ces parenthèses mais je continue a faire des tests qui je l'espère finiront par ce révéler concluant.

    Seulement, je ne comprends pas pourquoi je suis obligé de passer par deux sous-requêtes ?
    Sa complique beaucoup les choses, il n'y a pas possibilité de réduire la requête ?

    ******************************************************************

    EDIT :

    Voilà, j'ai repris la solution que tu m'as proposé skuatamad et malheuresement, je suis à nouveau confronté à un problème pourtant je me suis appliqué pour suivre ton exemple à la lettre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT nom, concat(prenom,' %'), concat(perc1,' %') AS perc1 ,concat(pourcentage,' %') AS pourcentage
    FROM (
         SELECT nom, concat(prenom,' %'), ((count(*)/sum(personne))*100) AS perc1,
                (count(personne)/(SELECT SUM(personne) FROM teble1)*100) AS pourcentage
           FROM table1, table2, table3
           WHERE ...... ...... ....... .......
           GROUP BY nom
    );
    Cette fois, je semble avoir un problème au niveau de mes "AS", pourtant la méthode que tu m'as conseillé est possible n'est-ce pas ?

    Voilà le message d'erreur qui m'est retourné :
    #1248 - Every derived table must have its own alias

    Merci d'avance.

  9. #9
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 080
    Points : 30 801
    Points
    30 801
    Par défaut
    Pour ta dernière erreur, elle se corrige simplement en donnant un alias à la table dérivée (la sous-requête utilisée dans le FROM)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT *
    FROM (SELECT * FROM toto) AS alias
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  10. #10
    Candidat au Club
    Inscrit en
    Juin 2009
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 9
    Points : 4
    Points
    4
    Par défaut
    Sa y est sa marche enfin !!!!
    Merci beaucoup à tous pour votre aide.

    Je n'avais jamais utilisé d'alias auparavant, donc j'aurais aimé savoir si tu pouvais m'en dire un peu plus al1_24. Sa sert à quoi exactement un alias ?

    Au plaisir de vous revoir et à très bientot...

  11. #11
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 947
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 947
    Points : 5 846
    Points
    5 846
    Par défaut
    Ca sert à renommer une colonne,une table (ex table1 -> t1) pour aléger l'écriture des jointures et filtres par exemple.

    Tu peux aussi aliasser une sous requête (c'est même obligatoire si tu veux joindre son résultat).

    Dans ton cas l'alias de la sous-requête est obligatoire car MySql pinaille un peu, avec d'autres SGBD il n'est pas obligatoire car il n'apporte rien de plus.

  12. #12
    Candidat au Club
    Inscrit en
    Juin 2009
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 9
    Points : 4
    Points
    4
    Par défaut
    Ok merci de m'avoir éclairer sur la question skuatamad.

    Et merci d'avoir pris le temps de m'aider à résoudre mon problème.

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

Discussions similaires

  1. Problème de concaténation avec valeur numérique
    Par Freedolphin dans le forum Langage
    Réponses: 4
    Dernier message: 22/12/2011, 17h27
  2. Concaténation texte et valeurs numériques
    Par matt41fr dans le forum MATLAB
    Réponses: 3
    Dernier message: 23/03/2011, 18h45
  3. Réponses: 10
    Dernier message: 30/11/2006, 23h06
  4. retait d'une valeur numérique au mieu d'un texte
    Par RémiDavid dans le forum Langage SQL
    Réponses: 3
    Dernier message: 28/04/2004, 16h20
  5. [Delphi 6] EditBox -> valeurs numériques ?
    Par JBrek dans le forum Composants VCL
    Réponses: 9
    Dernier message: 02/12/2002, 13h08

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