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 :

Retourner un count d'element par mois


Sujet :

Langage SQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mai 2006
    Messages : 23
    Par défaut Retourner un count d'element par mois
    Bonjour,

    Je travail sur une requete qui me permet de comptabiliser le nombre d'accès à une donnée par mois sur 12 mois glissant.

    Dans ma table j'ai donc id, type_donnee, date.

    Je souhaite donc obtenir un réultat du type :

    mois :: nb
    4 :: 1200
    5 :: 567
    6 :: 234
    7 :: 1001
    8 :: 2345
    9 :: 0
    10 :: 256
    11 :: 102
    12 :: 562
    1 :: 0
    2 :: 120
    3 :: 769

    j'essai donc la requete suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    SELECT MONTH( FROM_UNIXTIME( date ) ) AS mois, (
     
    CASE WHEN COUNT( id ) & gt;
     
    0 THEN COUNT( id ) ELSE 0 END
    ) AS nb FROM  `ma_table` WHERE DATE>1175378401 AND type_donnee='connexion' GROUP BY mois ORDER BY DATE
    Mais j'obtient le résultat :
    mois :: nb
    4 :: 203
    5 :: 793
    12 :: 1235
    3 :: 3764

    je n'ai pas de count pour les mois qui n'ont pas d'enregistrement.

    Merci pour votre aide

  2. #2
    Membre Expert

    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 683
    Par défaut
    Faites une table des mois (si vous n'en avez pas déjà une) et effectuez une jointure externe à partir de celle ci vers la table que vous utilisez actuellement. Les mois manquant apparaîtront alors.

    Au passage, enlevez le CASE pour votre comptage, c'est inutile.

  3. #3
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    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 136
    Par défaut
    Comment veux-tu faire pour retourner une valeur qui n'est pas dans la sélection ?
    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.

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mai 2006
    Messages : 23
    Par défaut
    beh justement je pose la question

    Bon étant donné que je fais un select sur les mois je me disait que peut être il avait une subtilité qui permettrai d'afficher chaque mois depuis la date minimum jusqu'à maintenant et de faire un count de l'élément type_donnee pour ce mois et zéro s'il n'y a pas d'enregistrement.

    Mais bon visiblement ce n'est pas possible.

    Je conçois que ma requête n'amène pas à ce résultat, mais j'ai plus de mal a comprendre en quoi c'est impossible vu que toutes les données sont la.

  5. #5
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    22 010
    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 : 22 010
    Billets dans le blog
    6
    Par défaut
    SQL ne saurait inventer des données qui n'existe pas. SQL n'est pas magique, mais logique. SI vous voulez voir apparaître un mois (et son année associée, car un mois sans année c'est illogique), alors il vous faut avoir cette information d'une manière ou d'une autre dans la base.

    La manière la plus performante de faire cela est d'avoir une table avec toutes les dates depuis l'origine des dates de votre SI jusqu'a 20 ou 30 ans de prospective.

    Lisez l'article que j'ai écrit à ce sujet : http://sqlpro.developpez.com/cours/gestiontemps/

    Après il suffira de faire une jointure externe droite sur cette table et d'utiliser la colonne mois de la table calendrier.

    A +
    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/ * * * * *

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mai 2006
    Messages : 23
    Par défaut
    Merci pour vos réponses je vais donc m'orienter vers cette solution.

    Je crois savoir que vous avez sorti un livre et au vu des réponses toujours pertinentes que vous fournissez je penses que je vais l'acheter.

    Pourriez vous m'indiquer les références ou un lien pour me le procurer.Merci.

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mai 2006
    Messages : 23
    Par défaut
    Bon alors j'ai testé la méthode de la table des mois, j'ai donc créé une table mois qui contient id, libelle avec comme clé primaire le numéro du mois.
    J'ai fais une jointure comme expliqué dans le cours de sqlpro donc ma requete donne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT COUNT( id_log ) AS NOMBRE, mois.id
    FROM ma_table
    LEFT JOIN mois ON mois.id = MONTH( FROM_UNIXTIME( DATE ) ) 
    WHERE DATE >
    1175378401 AND type_donnee='connexion' GROUP BY mois.id ORDER BY DATE
    Donc petite explication la date que je fournis est un timestamp unix.
    Dans ma table j'ai aussi les déconnexion donc je dois spécifier le type_donnee.

    Mais j'ai toujours le même résultat. Il compte le nombre de résultats et me retourne un mois uniquement si il y a une connexion ce mois-ci.

    Faut-il absolument que les champs du ON soit identique ou est-ce que la comparaison des valeurs qu'ils contiennent suffit ?

    Quelqu'un voit-il une autre solution ?

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

Discussions similaires

  1. [MySQL] group by, inclure les mois retournant 0 count()
    Par nath-0-0 dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 29/05/2013, 16h03
  2. [MySQL] probleme tableau somme count(*) d'une table par mois
    Par italiano1360 dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 22/05/2012, 13h47
  3. Grouper des count(Date) par mois?
    Par Hydex dans le forum Langage SQL
    Réponses: 1
    Dernier message: 28/06/2007, 15h51
  4. retourner un count() par une fonction PL/pgSQL ?
    Par ctobini dans le forum PostgreSQL
    Réponses: 6
    Dernier message: 22/05/2007, 14h12
  5. Regroupement par mois
    Par fplanglois dans le forum SQL
    Réponses: 7
    Dernier message: 29/07/2003, 16h32

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