Date: prev next · Thread: first prev next last
2020 Archives by date, by thread · List index


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+unsubscribe@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

Context


Privacy Policy | Impressum (Legal Info) | Copyright information: Unless otherwise specified, all text and images on this website are licensed under the Creative Commons Attribution-Share Alike 3.0 License. This does not include the source code of LibreOffice, which is licensed under the Mozilla Public License (MPLv2). "LibreOffice" and "The Document Foundation" are registered trademarks of their corresponding registered owners or are in actual use as trademarks in one or more countries. Their respective logos and icons are also subject to international copyright laws. Use thereof is explained in our trademark policy.