]> gitweb.pimeys.fr Git - scripts-20-100.git/commitdiff
[bde] adhesions_annee : pour des stats sur les anciens adhérents encore adhérents
authorVincent Le Gallic <legallic@crans.org>
Sun, 11 Oct 2015 22:39:24 +0000 (00:39 +0200)
committerVincent Le Gallic <legallic@crans.org>
Sun, 11 Oct 2015 22:39:24 +0000 (00:39 +0200)
bde/stats/adhesions_annee.sh [new file with mode: 0755]

diff --git a/bde/stats/adhesions_annee.sh b/bde/stats/adhesions_annee.sh
new file mode 100755 (executable)
index 0000000..209c905
--- /dev/null
@@ -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;"