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 :

FLOAT et DECIMAL pas sous mysql


Sujet :

Langage SQL

  1. #1
    Membre extrêmement actif Avatar de lodan
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    2 064
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 064
    Points : 682
    Points
    682
    Par défaut FLOAT et DECIMAL pas sous mysql
    Bonjour,

    J'essaye d'utiliser en vain FLOAT et DECIMAL dans mes requêtes pour faire un calcul de %.

    Mais à chaque fois, j'ai une erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT t_users_dossiers.id_user AS 'User', 
           count( t_users_dossiers.id_user ) AS 'Nombre de dossiers', 
           CAST(count('Nombre de dossiers') AS FLOAT ) / 
           CAST(SUM('Nombre de dossiers') AS FLOAT) * 100 
           AS 'Taux'
    FROM   t_users_dossiers
    GROUP  BY t_users_dossiers.id_user
    Erreur
    #1064 - Erreur de syntaxe près de 'FLOAT ) /
    CAST(SUM('Nombre de dossiers') AS FLOAT) * 10' � la ligne 3
    Idem avec decimal

    Est-ce normal ?

    Merci d'avance

  2. #2
    Expert éminent
    Homme Profil pro
    Big Data / Freelance EURL
    Inscrit en
    Mars 2003
    Messages
    2 124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Big Data / Freelance EURL

    Informations forums :
    Inscription : Mars 2003
    Messages : 2 124
    Points : 7 291
    Points
    7 291
    Par défaut
    Un alias de colonne ne peut pas être réutilisé sauf dans la requête appelante.
    La requête suivante fonctionne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    select ma_colonne, toto +1
    from ( select ma_colonne,ma_colonne as toto From titi )
    La requête suivante ne fonctionne pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select ma_colonne as toto, toto+1 From titi
    Donc ça pourrait être, mais cela ne fonctionne pas car double agrégation sans double group by :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT t_users_dossiers.id_user AS 'User', 
           count( t_users_dossiers.id_user ) AS 'Nombre de dossiers', 
           CAST(count(count( t_users_dossiers.id_user ) ) AS FLOAT ) / 
           CAST(SUM(count( t_users_dossiers.id_user ) ) AS FLOAT) * 100 
           AS 'Taux'
    FROM   t_users_dossiers
    GROUP  BY t_users_dossiers.id_user
    ça serait plus
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    SELECT T.'User', T.'Nombre de dossiers'
           CAST(count(T.'Nombre de dossiers' ) ) AS FLOAT ) / 
           CAST(SUM(T.'Nombre de dossiers' ) AS FLOAT) * 100 
           AS 'Taux'
    FROM (
          SELECT t_users_dossiers.id_user AS 'User', 
           count( t_users_dossiers.id_user ) AS 'Nombre de dossiers'
         FROM   t_users_dossiers
         GROUP  BY t_users_dossiers.id_user) T
    GROUP BY T.'User', T.'Nombre de dossiers'
    Bizarre les alias avec les espaces, attention aux clients légers ou lourds qui risquent de ne pas apprécier.
    Il faudrait peut-être inverser les CAST et SUM.

  3. #3
    Membre extrêmement actif Avatar de lodan
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    2 064
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 064
    Points : 682
    Points
    682
    Par défaut
    Citation Envoyé par phili_b
    ça serait plus
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    SELECT T.'User', T.'Nombre de dossiers'
           CAST(count(T.'Nombre de dossiers' ) ) AS FLOAT ) / 
           CAST(SUM(T.'Nombre de dossiers' ) AS FLOAT) * 100 
           AS 'Taux'
    FROM (
          SELECT t_users_dossiers.id_user AS 'User', 
           count( t_users_dossiers.id_user ) AS 'Nombre de dossiers'
         FROM   t_users_dossiers
         GROUP  BY t_users_dossiers.id_user) T
    GROUP BY T.'User', T.'Nombre de dossiers'
    Merci beaucoup.

    En voulant essayer j'ai tout de suite eu :

    #1064 - Erreur de syntaxe pr�s de ''User', T.'Nombre de dossiers'
    CAST(count(T.'Nombre de d' � la ligne 1
    Et j'avoue ne pas savoir quoi toucher, retirer les "'" n'est pas la solution.

  4. #4
    Expert éminent
    Homme Profil pro
    Big Data / Freelance EURL
    Inscrit en
    Mars 2003
    Messages
    2 124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Big Data / Freelance EURL

    Informations forums :
    Inscription : Mars 2003
    Messages : 2 124
    Points : 7 291
    Points
    7 291
    Par défaut
    En général on écrit plutôt ceci pour faciliter l'utilisation
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    count( t_users_dossiers.id_user ) AS NB_DOSSIERS
    sans quote ni espace

    Sinon ça peut venir du fait que j'ai oublié une virgule avant le CAST !!

  5. #5
    Membre extrêmement actif Avatar de lodan
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    2 064
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 064
    Points : 682
    Points
    682
    Par défaut
    J'avais vu la virgule et j'ai retiré les "'", ce qui donne ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    SELECT T.User, T.NbDossiers,
           CAST(COUNT(T.NbDossiers)) AS FLOAT) / 
           CAST(SUM(T.NbDossiers) AS FLOAT) * 100 
           AS Taux
    FROM (
          SELECT t_users_dossiers.id_user AS User, 
           count(t_users_dossiers.id_user) AS NbDossiers
         FROM   t_users_dossiers
         GROUP  BY t_users_dossiers.id_user) T
    GROUP BY T.User, T.NbDossiers
    Mais j'ai l'erreur incompréhensible

    requête SQL: Documentation

    SELECT T.User, T.NbDossiers, CAST( COUNT( T.NbDossiers ) ) AS FLOAT
    ) / CAST( SUM( T.NbDossiers ) AS FLOAT ) *100 AS Taux
    FROM (

    SELECT t_users_dossiers.id_user AS User, count( t_users_dossiers.id_user ) AS NbDossiers
    FROM t_users_dossiers
    GROUP BY t_users_dossiers.id_user
    )T
    GROUP BY T.User, T.NbDossiers
    LIMIT 0 , 30
    MySQL a réponduocumentation
    #1064 - Erreur de syntaxe près de ') AS FLOAT) /
    CAST(SUM(T.NbDossiers) AS FLOAT) * 100
    ' � la ligne 2
    Et avec la doc ou le forum, je ne vois pas d'erreur.

    J'ai retiré FLOAT et je n'ai plus d'erreur à l'exécution, j'ai éclaté le détail des calcul pour connaître les valeurs. La colonne COUNT( T.NbDossiers
    ) est erroné, j'ai la valeur 1 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT T.User, T.NbDossiers, COUNT( T.NbDossiers ) , SUM( T.NbDossiers ) , COUNT( T.NbDossiers ) / SUM( T.NbDossiers ) *100 AS Taux
    FROM (
     
    SELECT t_users_dossiers.id_user AS User, count( t_users_dossiers.id_user ) AS NbDossiers, '', '', ''
    FROM t_users_dossiers
    GROUP BY t_users_dossiers.id_user
    ) AS T
    GROUP BY T.User, T.NbDossiers
    Dans la base pour le user 1 j'ai 5 dossiers, pour le user 2 j'ai 112 dossiers, pour le user 3 j'ai 96 dossiers. Le nombre total de dossiers dans ma base est de 2986.

    Je dois avoir comme ligne résultat
    user 1
    nombre de dossier 5
    pourcentage 5/2986*100 = 0,17

  6. #6
    Membre extrêmement actif Avatar de lodan
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    2 064
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 064
    Points : 682
    Points
    682
    Par défaut
    Je l'ai solutionné ici

    Merci à tous

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

Discussions similaires

  1. [MySQL] Update en PHP foireux mais pas sous MySQL
    Par Gouzoul dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 08/04/2009, 18h58
  2. [MySQL] requete sql ne marche pas sous mysql 4
    Par _bender_ dans le forum PHP & Base de données
    Réponses: 11
    Dernier message: 12/12/2008, 18h16
  3. Fonctionne sous oracle mais pas sur mysql ?
    Par dauphin34000 dans le forum Requêtes
    Réponses: 2
    Dernier message: 01/09/2008, 18h27
  4. Problème avec float sous Mysql
    Par adgabd dans le forum Bases de données
    Réponses: 1
    Dernier message: 22/09/2006, 11h52
  5. erreur de requete sous php mais pas sous mysql
    Par kenny49 dans le forum Requêtes
    Réponses: 21
    Dernier message: 28/06/2006, 17h36

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