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 :

comptage par regroupement


Sujet :

Requêtes MySQL

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 5
    Points : 2
    Points
    2
    Par défaut comptage par regroupement
    Bonjour,

    j'ai une table du genre :
    id | duree
    01 | 15
    02 | 15
    03 | 30
    04 | 60
    05 | 70
    06 | 70
    et je voudrais, en une seule requete m'afficher le nombre de 'ligne' ayant une durée comprise entre 0 et 30, puis entre 31 et 60 et enfin 61 et 90

    je sais faire un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT id, count (*) 
    from matable 
    WHERE duree<30 
    groupy by id
    mais j'aimerai autant ne pas devoir faire 3 requetes pour ca (surtout que je vais vite devoir faire plein de requetes pour tous les intervalles)


    Du coup ... je solicite votre aide
    j'ai googletisé toute la journée sans succès (je ne dois pas trouver les bons parametres de recherche...)

  2. #2
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 5
    Points : 2
    Points
    2
    Par défaut

    je post et dans la foulée je continue de chercher ... http://www.developpez.net/forums/d57...selon-valeurs/

    ca devrait repondre a mes besoins ...
    (je vais tester quand meme)

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    j'ai trouvé 'une' solution, c'est p'te laid et inadapté mais ca marche :p

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT 
    (select count(*) from matable where duree between 1 and 30) as "1-30",
    (select count(*) from matable where duree between 31 and 61) as "31-61"
    FROM matable limit 1

    Désolé ... comme quoi, il suffit generalement de demander de l'aide pour trouver tout seul ...

  4. #4
    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 040
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Loiret (Centre)

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

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

    Ce qui est dommage, c'est d'avoir à passer par autant de sous-requêtes que tu auras de groupes de 30 à obtenir. Ça revient presque à faire une requête pour chaque groupe. Et de plus, ça ne donne pas le groupe 60-90...
    Par contre, en se basant sur le lien que tu as trouvé, on peut imaginer une solution (certes un peu barbare, mais qui fonctionne) comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    select 30 + 30 * floor((duree-1) / 30), count(*)
    from matable
    group by 1
    Ça donne le résultat attendu .

    ced

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    j'ai fait la méthode de l'autre post et ca marche bien

    mais j'avais essayé autre chose pour définir moi même les intervales mais ca revient exactement au meme que faire plusieurs requetes, surtout que ca gere pas les jointures..

    bref, faut que je trouve encore mieux

  6. #6
    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 : 73
    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,
    Citation Envoyé par Dorinn Voir le message
    je voudrais, en une seule requete m'afficher le nombre de 'ligne' ayant une durée comprise entre 0 et 30, puis entre 31 et 60 et enfin 61 et 90
    Si ces tranches sont figées et limitées à trois tu peux essayer sans GROUP BY
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT SUM(IF(duree BETWEEN 1 AND 30,1,0)) AS t1,
    SUM(IF(duree BETWEEN 31 AND 60,1,0)) AS t2,
    SUM(IF(duree > 60,1,0)) AS t3
    FROM latable

  7. #7
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    Rhooooo

    C'est exactement ce dont je cherchais à faire

    Merci beaucoup

    du coup, j'aurai ma requete et donc je vais pouvoir avancer. Et j'aurai appris comment fair des conditions (je savais pas qu'on pouvais faire des "IF" ...)


    Merci

  8. #8
    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 : 73
    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
    Citation Envoyé par Dorinn Voir le message
    Et j'aurai appris comment fair des conditions (je savais pas qu'on pouvais faire des "IF" ...)
    La syntaxe utilisée ici est propre à MySQL, me semble-t'il, en SQL standard il faudrait passer par CASE WHEN condition THEN ... ELSE...END

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

Discussions similaires

  1. sélection unique en fonction d'un attribut et comptage sur regroupement
    Par JMi$h€ll dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 16/10/2007, 12h18
  2. Etat : pagination par regroupement
    Par Gabout dans le forum IHM
    Réponses: 2
    Dernier message: 25/07/2007, 13h36
  3. multiplication par regroupement
    Par Alexandr dans le forum Access
    Réponses: 3
    Dernier message: 28/07/2006, 12h54
  4. Comptage par valeur
    Par solp dans le forum Langage SQL
    Réponses: 6
    Dernier message: 22/03/2006, 05h16
  5. Compter le nombre de page par regroupement
    Par bondyfalat dans le forum Access
    Réponses: 2
    Dernier message: 01/03/2006, 18h08

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