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 :
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)]
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
Au final un peu sous ce format là :
Pour l'instant je le fais en 2 requêtes, mais j'aimerais le faire dans une seule requête.
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
Voici par exemple la requête pour les stats après 2000 :
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)
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;
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]
Partager