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 :

Récupérer un pourcentage


Sujet :

Requêtes MySQL

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    433
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 433
    Points : 240
    Points
    240
    Par défaut Récupérer un pourcentage
    Bonjour,

    Je travaille sur un petit module de sondage.
    Vous trouverez la partie du MCD concerné attachée à ce message.
    Si besoin d'explications n'hésitez pas à demander, mais je pense pas que ça devrait être nécessaire.

    Voici la requête que j'utilise actuellement pour retourner la liste des options du sondage, ainsi que le nombre de réponse apportées :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    SELECT
    	O.num_option, O.ordre, O.libelle,
    	IF(R.id_user IS NULL, 0, count(*)) as nbreponse
    FROM
    	options O
    	LEFT JOIN reponses R ON O.id_sondage = R.id_sondage AND O.num_option = R.num_option
    WHERE
    	O.id_sondage = 1
    GROUP BY
    	O.num_option, O.ordre, O.libelle
    ORDER BY
    	nbreponse DESC, O.libelle ASC
    Dont voici un exemple de retour :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    num_option  ordre libelle           nbreponse
    1           2     Troisième rep	    10
    4           4     Le premier choix  5
    2           3     Test de choix     5
    3           1     Une 4e réponse    0
    Je voudrais ajouter une colonne "pourcentage" à la fin de la sélection.
    Je ne voie pas comment m'y prendre, pouvez-vous m'indiquer s'il y a une fonction et/ou une manière de procéder pour avoir un retour sous la forme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    num_option  ordre libelle           nbreponse pourcentage
    1           2     Troisième rep	    10        0.50
    4           4     Le premier choix  5         0.25
    2           3     Test de choix     5         0.25
    3           1     Une 4e réponse    0         0
    Avec éventuellement un autre format pour le pourcentage.

    Merci pour votre aide.

  2. #2
    Membre chevronné Avatar de nosferapti
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    1 157
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 1 157
    Points : 1 895
    Points
    1 895
    Par défaut
    pour faire ça tu as besoin de calculer la somme totale des réponses. tu peux par exemple faire une sous-requête mais ça prend beaucoup de ressources dans ton cas donc il vaut mieux faire ce calcul dans ton application
    GNAP !

  3. #3
    Membre actif
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    433
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 433
    Points : 240
    Points
    240
    Par défaut
    Personne n'a éventuellement une autre solution ?
    Je ne sais pas pourquoi il me semble avoir vu une fois une fonction qui fesait quelque chose comme ça mais je n'arrive pas à remettre la main dessus... peut-être ai-je rêvé ?

  4. #4
    Membre expert
    Avatar de Maljuna Kris
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2005
    Messages
    2 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 613
    Points : 3 950
    Points
    3 950
    Par défaut
    Saluton,
    Regarde, à tout hasard, du côté de WITH ROLLUP, à ajouter à la clause GROUP BY, mais je ne garantis rien.
    Kie lumo eksistas ankaŭ ombro troviĝas. L.L. Zamenhof
    articles : Comment émuler un tableau croisé [quasi] dynamique
    et : Une énigme mathématique résolue avec MySQL
    recommande l'utilisation de PDO (PHP5 Data Objects)

  5. #5
    Membre actif
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    433
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 433
    Points : 240
    Points
    240
    Par défaut
    Ça permet toujours d'avoir le nombre de réponse total, mais comme la ligne s'ajoute à la fin de la requête, il n'est pas possible d'effectuer un calcul avec (or c'est ce qu'il faudrait faire pour calculer le pourcentage).

    Ça avance un peu mais ça ne réponds toujours pas à la question de base ^^

  6. #6
    ced
    ced est déconnecté
    Rédacteur/Modérateur

    Avatar de ced
    Homme Profil pro
    Gestion de bases de données techniques
    Inscrit en
    Avril 2002
    Messages
    6 016
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Gestion de bases de données techniques
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2002
    Messages : 6 016
    Points : 23 705
    Points
    23 705
    Par défaut
    Bonjour,

    Pour l'instant, sous MySQL, ce n'est pas possible, sauf à passer effectivement par une sous-requête, qui prendrait beaucoup de ressource.
    La fonction à laquelle tu penses, c'est peut-être une fonction de fenêtrage... Mais ces fonctions ne sont pas implémentées actuellement dans MySQL.

    ced
    Rédacteur / Modérateur SGBD et R
    Mes tutoriels et la FAQ MySQL

    ----------------------------------------------------
    Pensez aux balises code et au tag
    Une réponse vous a plu ? N'hésitez pas à y mettre un
    Je ne réponds pas aux questions techniques par message privé, les forums sont là pour ça

  7. #7
    Membre actif
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    433
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 433
    Points : 240
    Points
    240
    Par défaut
    Ok tant pis, merci à tous pour vos réponses.

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Octobre 2007
    Messages : 50
    Points : 53
    Points
    53
    Par défaut
    Il me semble qu'en gros cela donne ça:

    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
     
    SELECT
    	t1.num_option, 
    	t1.ordre,
    	t1.libelle,
    	t1.nbreponse,
    	ROUND((t1.nbreponse/t2.nombretotal)*100) AS pourcentage
     
    FROM
    	(SELECT
    	O.num_option, O.ordre, O.libelle,
    	IF(R.id_user IS NULL, 0, count(*)) AS nbreponse
    	FROM
    	options O
    	LEFT JOIN reponses R ON O.id_sondage = R.id_sondage AND O.num_option = R.num_option
    	WHERE
    	O.id_sondage = 1
    	GROUP BY
    	O.num_option, O.ordre, O.libelle)
    AS t1,
    	(
    	SELECT
    	COUNT(*) AS nombretotal
    	FROM
    	options O
    	LEFT JOIN reponses R ON O.id_sondage = R.id_sondage AND O.num_option = R.num_option
    	WHERE
    	O.id_sondage = 1
    )
    AS t2
     
    ORDER BY
    	t1.nbreponse DESC, t1.libelle ASC
    Evidemment que cela prend quelques ressources.... Mais bon, si ça se trouve tu n'as pas plus de quelque milliers d'enregistrements et ça va aller très vite. Il faut essayer !

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 23/12/2009, 10h55
  2. Récupérer 10 nb différents avec un calcul aléatoire
    Par BXDSPORT dans le forum Langage
    Réponses: 3
    Dernier message: 04/08/2002, 02h35
  3. récupérer la valeur de sortie d'un thread
    Par jakouz dans le forum Langage
    Réponses: 3
    Dernier message: 31/07/2002, 11h28
  4. Réponses: 11
    Dernier message: 23/07/2002, 14h33
  5. Comment récupérer une adresse MAC ?
    Par psau dans le forum Développement
    Réponses: 7
    Dernier message: 19/07/2002, 17h26

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