From e832abf298861631a368f28043a00cb7c2e7185c Mon Sep 17 00:00:00 2001 From: Vincent Le Gallic Date: Mon, 12 Oct 2015 00:39:24 +0200 Subject: [PATCH] =?utf8?q?[bde]=20adhesions=5Fannee=20:=20pour=20des=20sta?= =?utf8?q?ts=20sur=20les=20anciens=20adh=C3=A9rents=20encore=20adh=C3=A9re?= =?utf8?q?nts?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- bde/stats/adhesions_annee.sh | 73 ++++++++++++++++++++++++++++++++++++ 1 file changed, 73 insertions(+) create mode 100755 bde/stats/adhesions_annee.sh diff --git a/bde/stats/adhesions_annee.sh b/bde/stats/adhesions_annee.sh new file mode 100755 index 0000000..209c905 --- /dev/null +++ b/bde/stats/adhesions_annee.sh @@ -0,0 +1,73 @@ +#!/bin/bash + +# Afficher le nombre d'adhérents en fonction de leur première année d'adhésion +# Si on appelle le script avec en paramètre une année, il fait le calcul pour les adhérents +# encore adhérents pour l'année fournie. +# Si on l'appelle sans paramètre, il fait le calcul pour toutes les années possibles +# et présente le résultat dans une "matrice" triangulaire + +export LESS='-SR' + +case $1 in + "") + # Vide, on va lancer le script de calcul complet + ;; + *) + # Pas vide, on espère que c'est bien une année et on lance le calcul seulement dessus + annee=$1 + psql note -c " + SELECT count(idbde), prems + FROM ( + SELECT a.idbde, pseudo, nom, prenom, + (SELECT min(annee) FROM adhesions WHERE adhesions.idbde = c.idbde) AS prems + FROM comptes c, adhesions a + WHERE a.idbde = c.idbde AND a.annee = ${annee} + ) AS prout + GROUP BY prems + ORDER BY prems;" + exit + ;; +esac + +echo "Creating auxiliary table fy" +psql note -c "DROP TABLE IF EXISTS fy; + (SELECT idbde, min(annee) AS firstyear INTO fy FROM adhesions GROUP BY idbde);" + +echo "Computing year range" +beginend=$(psql note -A -c "SELECT (SELECT min(firstyear) FROM fy), (SELECT max(firstyear) FROM fy);" | tail -n +2 | head -n 1) + +begin=$(echo ${beginend} | cut -d "|" -f 1) +end=$(echo ${beginend} | cut -d "|" -f 2) + +# Construction de la requête +req=" +SELECT years.annee AS prems," + +for annee in $(seq ${begin} ${end}) +do + # On ajoute une colonne pour chaque année + req="${req} + (SELECT count(c.idbde) + FROM comptes c, fy + WHERE c.idbde = fy.idbde + AND fy.firstyear = years.annee + AND EXISTS (SELECT idbde + FROM adhesions a + WHERE a.idbde = c.idbde + AND a.annee = ${annee} + ) + ) AS c${annee}," +done + +# enlève la dernière virgule +req=${req::-1} + +req="${req} +FROM (SELECT DISTINCT annee FROM adhesions) AS years +ORDER BY years.annee;" + +echo "Computing…" +psql note -c "${req}" + +echo "Removing auxiliary table" +psql note -c "DROP TABLE fy;" -- 2.39.2