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 PostgreSQL Discussion :

Requête statistiques par date + regroupement


Sujet :

Requêtes PostgreSQL

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    362
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 362
    Points : 132
    Points
    132
    Par défaut Requête statistiques par date + regroupement
    Bonjour à tous,

    Je reviens chercher un peu d'aide pour une requête SQL
    Je souhaite réaliser des synthèses statistiques de données (observations d'espèces) avec des seuils de dates.

    Pour simplifier, imaginons des données sous cette forme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    id	annee	espece		groupe
    1	1996	mésange		oiseaux
    2	1997	corneille	oiseaux
    3	1998	buse		oiseaux
    4	1999	papillon	insectes
    5	2000	libellule	insectes
    6	2001	mésange		oiseaux
    7	2002	buse		oiseaux
    8	2003	merle		oiseaux
    9	2004	libellule	insectes
    10	2005	merle		oiseaux
    Je souhaite avoir la synthèse, par groupe et par année, du nombre d'observations [count(ID)] et du nombre d'espèces [count(DISTINCT espece)]
    Au final un peu sous ce format là :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    		Count(ID)			Count(Distinct espece)	
    Groupe	'avant 2000'	'après 2000'	'avant 2000'	'après 2000'
    insectes	1		2		1		1
    oiseaux		3		4		3		3
    Pour l'instant je le fais en 2 requêtes, mais j'aimerais le faire dans une seule requête.
    Voici par exemple la requête pour les stats après 2000 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT groupe, count(id) as nb_observations, count(DISTINCT espece) as nb_especes
      FROM public.observations
      WHERE annee > 1999
      GROUP BY groupe;
    Est-il possible de réaliser en une seule requête ces 2 requêtes avec filtre de dates (en réalité, je ferais ensuite plusieurs classes de date. Exemple : avant 2000 | 2000-2010 | après 2010)

    Merci pour vos conseils.

    Sylvain M.

    [Edit]
    J'ai oublié de précisé que cela ressemble exactement à un "tableau croisé dynamique" sous Excel, mais que même sous Excel je ne sais pas compter uniquement des valeurs distinctes d'espèces.
    Je crois que le module tablefunc pourrait m'aider, mais j'avoue ne pas avoir réussi à écrir ma requête sous ce format là.
    [/Edit]

  2. #2
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    Bonjour,

    Vous pouvez mettre des CASE... WHEN dans vos COUNT pour ne compter que sous certaines conditions :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    SELECT 
        groupe
      ,  count(CASE WHEN annee <= 2000 THEN id END) as nb_observations_avant_2000
      ,  count(CASE WHEN annee > 2000 THEN id END) as nb_observations_après_2000
      , count(DISTINCT CASE WHEN annee <= 2000 THEN  espece END) as nb_especes_avant_2000
      , count(DISTINCT CASE WHEN annee > 2000 THEN  espece END) as nb_especes_après_2000
      FROM public.observations
      GROUP BY groupe;

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    362
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 362
    Points : 132
    Points
    132
    Par défaut
    Comment n'y ai-je pas pensé plus tôt !?
    Super : ça marche nickel !
    Merci aieeeuuuuu !

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

Discussions similaires

  1. Requête tri par date et somme
    Par Daleira dans le forum Requêtes et SQL.
    Réponses: 10
    Dernier message: 30/01/2014, 16h40
  2. Requête Sql qui regroupe par date
    Par stade13 dans le forum Langage SQL
    Réponses: 10
    Dernier message: 04/02/2013, 17h51
  3. Réponses: 6
    Dernier message: 13/09/2012, 08h24
  4. [AC-2010] Formulaire sur requête triée par date
    Par papychang dans le forum Access
    Réponses: 8
    Dernier message: 27/07/2011, 16h57
  5. Debutant - Requête Grouper par Date
    Par ghan77 dans le forum Bases de données
    Réponses: 3
    Dernier message: 06/12/2005, 17h07

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