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 :

Calcul de % sur une requête UNION ALL


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 Calcul de % sur une requête UNION ALL
    Bonjour,

    J'ai besoin de faire un calculde pourcentage et en lisant ceci, j'ai bien compris que c'était faisable.

    Sur une requête avec totalisation comme celle-ci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    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
    UNION ALL
    SELECT 'Total' AS 'User', count( t_users_dossiers.id_user ) AS "Nombre de dossiers"
    FROM t_users_dossiers
    Je veux rajouter une colonne qui calculerait le % de dossier d'un user par rapport au total.

    J'ai donc fait quelque chose comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    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')) * 100 
            	AS 'Taux',
    FROM t_users_dossiers
    GROUP BY t_users_dossiers.id_user
    UNION ALL
    SELECT 'Total' AS 'User', count( t_users_dossiers.id_user ) AS 'Nombre de dossiers',''
    FROM t_users_dossiers
    Mais il est faché avec "l'injure" suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    the right syntax to use near 'FLOAT ) /
            CAST(SUM('Nombre de dossiers')) * 100
    Ai-je bien la possibilité de faire un calcul de % sur une requête avec un UNION ?

    Merci d'avance
    Y a pas, plus on fait, plus on sait. Plus on cherche, plus on sait chercher. Maintenant quant à trouver, c'est autre chose.

  2. #2
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 763
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 763
    Points : 52 554
    Points
    52 554
    Billets dans le blog
    5
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    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
    UNION  ALL
    SELECT 'Total' AS 'User', count( t_users_dossiers.id_user ) AS 'Nombre de dossiers',''
    FROM   t_users_dossiers
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  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
    Merci, mais j'ai l'erreur

    Erreur de syntaxe près de 'FLOAT ) /
    CAST(SUM('Nombre de dossiers') AS FLOAT) * 10' � la ligne 3
    Est-ce un problème de version de mysql ?

    Je suis sous 4.0.25
    Y a pas, plus on fait, plus on sait. Plus on cherche, plus on sait chercher. Maintenant quant à trouver, c'est autre chose.

  4. #4
    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
    Si je fais quelque chose d'aussi simple que ça

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT CAST(COUNT(id_maj) as DECIMAL(14,4))/CAST(COUNT(DISTINCT ass_tiers_id) as DECIMAL(14,4)) as 'Nombre de dossiers par Assurance'  FROM
     maj_assurance
    J'ai aussi une erreur du genre :

    #1064 - You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'DECIMAL(14,4))/CAST(COUNT(DISTINCT ass_tiers_id) as DECIMAL(14,
    Avec un mysql 4.0.25.

    C'est étrange, oui je dis c'est étrange
    Y a pas, plus on fait, plus on sait. Plus on cherche, plus on sait chercher. Maintenant quant à trouver, c'est autre chose.

  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
    Pour tout ceux qui se creuse la tête, j'ai fini par trouver en faisant simple.

    Les CAST c'est pas mon truc et en plus je ne sais pas pourquoi cela ne fonctionne.

    Bref voici le résultat :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SET @total = ( SELECT COUNT( id_gest_dossier )
    FROM t_users_dossiers ) ;
    SELECT id_user, COUNT( id_gest_dossier ) , ROUND( COUNT( id_gest_dossier ) / @total *100, 3 ) AS '%'
    FROM t_users_dossiers
    GROUP BY id_user
    C'esst cool...
    Y a pas, plus on fait, plus on sait. Plus on cherche, plus on sait chercher. Maintenant quant à trouver, c'est autre chose.

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 18/03/2014, 14h59
  2. Numérotation automatique sur une requête union
    Par ALEX80800 dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 18/01/2012, 18h13
  3. [AC-2007] Requête création de table basée sur une requête union
    Par etoileweb dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 26/08/2011, 20h09
  4. Pb sur une requête de calcul de cumul
    Par nomade333 dans le forum Requêtes et SQL.
    Réponses: 0
    Dernier message: 03/04/2008, 20h59
  5. [Optimisation] Problème sur une requête UNION.
    Par françois62 dans le forum Requêtes
    Réponses: 5
    Dernier message: 28/06/2005, 16h08

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