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 :

compter par type d'enregistrement en limitant le nombre total


Sujet :

Langage SQL

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    613
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 613
    Points : 406
    Points
    406
    Par défaut compter par type d'enregistrement en limitant le nombre total
    Bonjour,

    J'ai une question sur le comptage :
    - Comment faire une requete qui selectionne des enregistrement compris entre par exemple deux dates, et compter leurs nombre mais en séparant par type, ET en limitant le nombre total.

    Exemple :
    une table T avec comme champs : date, type(int)
    Je voudrais sélectionner des enregistrement de T de type 1,2 ou 3 compris entre une date A et une date B, en limitant le nombre total de réponse à 100, et connaitre parmis ceux-là le nombre d'enregistrement de type 1, de type 2 et de type 3.

    Je sais qu'il faut utiliser COUNT et LIMIT mais je ne sais pas comment faire du comptage par type avec ces deux fonctions à la fois.

    merci

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 080
    Points : 30 810
    Points
    30 810
    Par défaut
    Pour pouvoir commencer à donner un début de réponse, il nous faudrait connaître la structure des tables en jeu ainsi qu'une ébauche de la requête que vous tentez d'effectuer.
    En précisant le SGBD que vous utilisez et sa version, les réponses proposées seront adaptées aux spécificités et limitations de celui-ci.
    Règles du forum Langage SQL à lire par tous
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  3. #3
    Membre émérite Avatar de pacmann
    Homme Profil pro
    Consulté Oracle
    Inscrit en
    Juin 2004
    Messages
    1 626
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consulté Oracle
    Secteur : Distribution

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 626
    Points : 2 845
    Points
    2 845
    Par défaut
    Salut !

    compris entre par exemple deux dates :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    WHERE TaDate BETWEEN borne1 and borne2
    connaitre parmis ceux-là le nombre d'enregistrement de type 1, de type 2 et de type 3 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    AND ColType IN (1, 2, 3)

    compter leurs nombre :
    en séparant par type :
    En gros :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    SELECT TonType, count(*)
    FROM TaTable
    WHERE TaDate BETWEEN borne1 AND borne2
      AND TonType IN (1, 2, 3)
    GROUP BY TonType
    Maintenant, je pense que ton histoire de limit n'a pas vraiment de sens.
    En effet, la fonction LIMIT (si tu es bien MySQL ou postgresql) restreint le nombre d'enregistrement en sortie, mais le résultat est soit aléatoire (ou plutôt indépendant de ta volonté), soit déterminé par un ordre que tu définis dans la clause ORDER BY.
    En supposant que ça ait un sens dans ton cas, tu peux tenter :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    SELECT TonType, Count(*) FROM
    (
    SELECT TonType
    FROM TaTable
    WHERE TaDate BETWEEN borne1 AND borne2
      AND TonType IN (1, 2, 3)
    ORDER BY TonCritere
    LIMIT 1, 100
    )
    GROUP BY TonType

    (c'est ma photo)
    Paku, Paku !
    Pour les jeunes incultes : non, je ne suis pas un pokémon...

    Le pacblog : http://pacmann.over-blog.com/

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    613
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 613
    Points : 406
    Points
    406
    Par défaut
    al1_24 : exemple de table :
    CREATE TABLE ma_table(id INTEGER PRIMARY KEY, date DATE, monType INTEGER);

    Pour la requete, c'est bien dans le genre de la derniere requete que pacmann à écrite.
    Par exemple récuperer 1000 enregistrement de type 1,2,3 et compter parmis ceux ci le nombre d'enregistrement de chaque type.

    pacman : cette requete marche très bien, merci !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    SELECT monType, Count(*) FROM
    (
    SELECT monType
    FROM maTable
    WHERE date BETWEEN borne1 AND borne2
      AND monType IN (1, 2, 3)
    ORDER BY date
    LIMIT 1000
    )
    GROUP BY monType

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    613
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 613
    Points : 406
    Points
    406
    Par défaut
    edit : j'ouvre un autre topic car c'est une autre question

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 21/03/2007, 15h32
  2. Limiter le nombre d'enregistrements par groupe
    Par atoff dans le forum Access
    Réponses: 2
    Dernier message: 10/01/2007, 09h26
  3. [CR] Compter le nbre d'enregistrement par page.
    Par sylviefrfr dans le forum SAP Crystal Reports
    Réponses: 1
    Dernier message: 21/02/2006, 10h21
  4. [MySQL] LIMIT et nombre total d'enregistrements
    Par titoumimi dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 23/01/2006, 11h40
  5. Limiter le nombre d'enregistrements renvoyés par un SELECT
    Par Wilco dans le forum Bases de données
    Réponses: 3
    Dernier message: 17/11/2004, 13h47

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