Partage
  • Partager sur Facebook
  • Partager sur Twitter

[MySQL] Grouper plusieurs valeurs

Sujet résolu
    16 septembre 2019 à 22:21:50

    Bonjour,

    Malgré des recherches, je n'ai pas de solution à mon problème.

    Voilà, ma table contient une liste de prêts avec un ID, un montant, une durée, ...

    Je souhaite compter le nombre de prêts groupés par durées :

    - <= 12

    -  > 12 et <= 24

    - ...

    - > 60

    Je n'ai pas de problème à les regrouper par durée (6 mois, 12 mois, 18 mois, ...) mais je souhaite les grouper plus globalement par période de 12 mois puis supérieur à 60 mois.

    Y a t'il une fonction qui permet de faire ça ?

    Merci d'avance

    -
    Edité par tonin2310 16 septembre 2019 à 22:22:31

    • Partager sur Facebook
    • Partager sur Twitter
      17 septembre 2019 à 8:46:02

      Bonjour,

      tonin2310 a écrit:

      je souhaite les grouper plus globalement par période de 12 mois puis supérieur à 60 mois

      Peux-tu nous donner un exemple de ce que tu souhaites ? Qu'entends par "période de douze mois" ? De 0 à 12, de 13 à 24, de 25 à 36, etc. ?

      -
      Edité par Benzouye 17 septembre 2019 à 8:46:16

      • Partager sur Facebook
      • Partager sur Twitter
      Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL
        17 septembre 2019 à 20:48:06

        Bonjour Benzouye et merci de m'avoir répondu. C'est exactement ça.

        Entre temps, j'ai trouvé ma réponse. Je ne trouvais plus mes mots pour la recherche sur Google. Je voulais faire par tranche. J'ai donc réussi avec ceci:

        SELECT
        CASE
                WHEN loan.initialDuration <= 12 THEN '<=12'
                WHEN loan.initialDuration BETWEEN 13 AND 24 THEN '<=24'
                WHEN loan.initialDuration BETWEEN 25 AND 36 THEN '<=36'
                WHEN loan.initialDuration BETWEEN 37 AND 48 THEN '<=48'
                ELSE '>48'
            END AS tranche,
            COUNT(loan.loanId) as nbloan, COUNT(IF(loan.status IN("Ongoing", "Early Repayment", "Fully repaid"), 1, NULL)) as nofailed, COUNT(IF(loan.status NOT IN("Ongoing", "Early Repayment", "Fully repaid"), 1, NULL)) as atLeastOnefailed
        FROM loan
        GROUP BY tranche

        Cependant, je voudrais savoir s'il est possible de calculer un pourcentage avec les alias nofailed (Pas de retard de paiement) et atLeastOnefailed (Au moins un retard de paiement) pour savoir le pourcentage de retard pour chaque tranche. Du style

        atLeastOnefailed * 100 / nbloan as pourcent


        J'ai l'erreur: 
        #1054 - Champ 'atLeastOnefailed' inconnu dans field list

        Forcément vu que c'est un alias. Une solution ?


        Merci :)


        -
        Edité par tonin2310 17 septembre 2019 à 20:51:14

        • Partager sur Facebook
        • Partager sur Twitter
          18 septembre 2019 à 8:53:29

          Il te faut réécrire la formule entière au lieu des alias ...

          • Partager sur Facebook
          • Partager sur Twitter
          Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL
            18 septembre 2019 à 12:26:46

            D'accord, c'est bien ce que je pensais 🙁 Et niveau optimisation, il est préférable de faire le calcul via MySQL ou PHP ou bien c'est kif-kif ?
            • Partager sur Facebook
            • Partager sur Twitter
              18 septembre 2019 à 13:43:51

              Derrière MySQL c'est du langage C, souvent plus performant que PHP ... je ne suis pas persuadé que la différence se ressente ... à tester si vraiment besoin de tweak.

              • Partager sur Facebook
              • Partager sur Twitter
              Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL
                18 septembre 2019 à 18:50:56

                D'accord, je te remercie beaucoup :)
                • Partager sur Facebook
                • Partager sur Twitter

                [MySQL] Grouper plusieurs valeurs

                × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                • Editeur
                • Markdown