Bonsoir,
Le 23/10/2020 à 15:55, Thierry Jeanneret a écrit :
Re,
Pour en avoir le coeur net je viens de créer une table neuve, avec
initialement deux colonnes : nom, date. Au cours de la création,
HSQLDB exige une colonne d'index (normal en somme). Je l'ai donc
laissé faire, en modifiant juste la propriété de la colonne ID créée
en la mettant en incrément automatique.
J'ai alimenté cette table avec les requêtes suivantes, une légère
extension du fichier .csv initial :
INSERT INTO "absences" ("nom", "date") VALUES ('Larry', 'Le 05/09/20');
INSERT INTO "absences" ("nom", "date") VALUES ('Sarah', 'Le 07/09/20');
INSERT INTO "absences" ("nom", "date") VALUES ('Sarah', 'Le 12/09/20');
INSERT INTO "absences" ("nom", "date") VALUES ('Sarah', 'Le 18/09/20');
INSERT INTO "absences" ("nom", "date") VALUES ('Sarah', 'Le 01/10/20');
INSERT INTO "absences" ("nom", "date") VALUES ('Anna', 'Le 25/09/20');
INSERT INTO "absences" ("nom", "date") VALUES ('Anna', 'Le 27/09/20');
INSERT INTO "absences" ("nom", "date") VALUES ('Anna', 'Le 05/10/20');
INSERT INTO "absences" ("nom", "date") VALUES ('Henri', 'Le 21/09/20');
INSERT INTO "absences" ("nom", "date") VALUES ('Henri', 'Le 25/09/20');
A ce stade la table contient :
SELECT * FROM "absences"
2,Larry,Le 05/09/20,
3,Larry,Le 05/09/20,
4,Sarah,Le 07/09/20,
5,Sarah,Le 12/09/20,
6,Sarah,Le 18/09/20,
7,Sarah,Le 01/10/20,
8,Anna,Le 25/09/20,
9,Anna,Le 27/09/20,
10,Anna,Le 05/10/20,
11,Henri,Le 21/09/20,
12,Henri,Le 25/09/20,
Il y a deux "Larry" ensuite d'autres manipulations...
Manifestement, l'index doit lui plaire car j'obtiens ceci :
SELECT "nom", COUNT(*) FROM "absences" GROUP BY "nom";
Larry,2,Larry,
Sarah,4,Sarah,
Anna,3,Anna,
Henri,2,Henri,
Mais par contre, le format de sortie est incorrect, je ne vois pas
pourquoi le nom est répété ni pourquoi il y a systématiquement une
virgule en fin de ligne.
Là, je suis d'accord. Mais ceci survient en utilisant Outils/SQL et en
affichant la sortie des instructions "Select" ?
Parce qu'en enregistrant la requête, le résultat au format table est
conforme.
Si je modifie la requête ainsi :
SELECT "nom", COUNT(*) AS "cnt" FROM "absences" GROUP BY "nom";
J'obtiens ceci :
Larry,2,Larry,
Sarah,4,Sarah,
Anna,3,Anna,
Henri,2,Henri,
La renommage de la colonne COUNT(*) ne se fait pas, ce qui indique
qu'il y a vraiment des trucs bizarres qui flottent dans le potage.
Bien sûr que si, si on regarde la requête au format table, après avoir
créé la requête. Pas en exécutant pas Outils/SQL, bien entendu.
Au passage, tiens, le GROUP BY tout pourri s'est mis à fonctionner ?
Bref, il semble qu'en créant une clé unique on parvienne à faire
fonctionner partiellement les fonctions d'agrégation, mais
franchement, je ne compterais pas trop dessus, d'autant plus si la
sortie est choucroutée.
Si, si, ça fonctionne parfaitement, en utilisant les requêtes, qui sont
faites pour être enregistrées et utilisées plus tard dans des
formulaires ou des rapports.
Peut-être qu'un jour, une nouvelle version, ou un autre moteur, qui
sait... Moi, je m'arrête là pour ce sujet.
Il vaut mieux, car ça donne une (fausse) image négative ce ce logiciel.
Ah, par contre si on veut connaître la date de la dernière absence de
chaque élève, voici comment faire (ATTENTION, les DATES sont bien sûr
traitées comme du TEXTE. D'où ma remarque précédente !) :
SELECT DISTINCT a."nom", a."date" FROM "absences" a WHERE a."date" =
SELECT MAX(b."date") FROM "absences" b WHERE a."nom" = b."nom";
Anna,Le 27/09/20,
Henri,Le 25/09/20,
Larry,Le 05/09/20,
Sarah,Le 18/09/20,
Et comme les dates sont au format texte, le résultat est faux. Avec des
dates au bon format, le résultat est correct.
Bonne soirée,
--
Jean-Michel Coste
--
Envoyez un mail à users+unsubscr...@fr.libreoffice.org pour vous désinscrire
Les archives de la liste sont disponibles à
https://listarchives.libreoffice.org/fr/users/
Privacy Policy: https://www.documentfoundation.org/privacy