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


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.

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.

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.

Peut-être qu'un jour, une nouvelle version, ou un autre moteur, qui sait... Moi, je m'arrête là pour ce sujet.

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,

Il y a toujours des virgules en trop, mais bon.

Bonne fin de journée,

Thierry




Le 21/10/2020 à 21:44, Stéphane Santon a écrit :

Bonsoir,

Fil de discussion très instructif pour moi, le demandeur.

Hier soir j'ai trouvé sur un forum une requête avec COUNT(*)+1 qui fonctionne sur Base, et je me suis douté que la source CSV était la cause du mauvais résultat de HSQLDB 1.8.

J'ai essayé d'activer l'option "Avancé | fonctions expérimentales" en espérant faire tourner Firebird, mais sans succès.

Pour ce qui est de la date sous la forme "Le ...", c'est un peu simplifié mais c'est effectivement sous forme de texte.qu'est fournie la plage de dates.
Ceci vient d'un export CSV du logiciel de Vie scolaire "Pronote".
Je pourrais demander qu'ils incluent des champs supplémentaires un peu plus normalisés... pour une mise en place dans 18 mois.

Ma finalité, c'est que l'utilisateur.ice (un.e collègue) fasse le job en un minimum d'étapes : - lancer l'export CSV Pronote et enregistrer le fichier CSV dans un dossier dédié,
- ouvrir un fichier Writer préparé pour le publipsotage lié au CSV,
- lancer les exports de publipostages individuels en PDF.



Le 20/10/2020 à 10:39, Stéphane Santon a écrit :
Bonjour,

Merci de l'aide. La colonne 'Qte' reste toujours vide.

Même avec un simple
SELECT
     "nom", "date_absence",
     ( SELECT COUNT( * ) FROM "absencesCsv2" ) "Qte"
FROM "absencesCsv2"

la colonne 'Qte' reste vide...

Base jointe.

(j'ai renommé ma colonne 'id' par 'nom')


Le 20/10/2020 à 09:01, LibreOffice a écrit :
Bonjour Stéphane,

Ceci pourrait marcher:

select id,
        date_absence,
        (select count(id)
         from presences as innerPresences
         where presences.id = innerPresences.id) as quantite
from presences;

Il s'agit d'une sous-requêtes corrélées: https://sqlpro.developpez.com/cours/sqlaz/sousrequetes/#L2

Bien à toi.

Le 20.10.2020 00:37, Stéphane Santon a écrit :
Bonjour,

Je cherche à créer une requête SQL sous Base qui me rajoute un champ
"calculé", le calcul étant le nombre d'enregistrements qui ont un
champ à la même valeur.

Depuis :

| id    | date_absence|
| Larry | 05/09/2020  |
| Sarah | 07/09/2020  |
| Sarah | 12/09/2020  |
| Sarah | 18/09/2020  |
| Sarah | 01/10/2020  |
| Anna  | 25/09/2020  |
| Anna  | 27/09/2020  |
| Anna  | 05/10/2020  |
| Henri | 21/09/2020  |
| Henri | 25/09/2020  |

Je veux sortir ça :

| id    | date_absence| Qté |
| Larry | 05/09/2020  | 1   |
| Sarah | 07/09/2020  | 4   |
| Sarah | 12/09/2020  | 4   |
| Sarah | 18/09/2020  | 4   |
| Sarah | 01/10/2020  | 4   |
| Anna  | 25/09/2020  | 3   |
| Anna  | 27/09/2020  | 3   |
| Anna  | 05/10/2020  | 3   |
| Henri | 14/09/2020  | 2   |
| Henri | 25/09/2020  | 2   |






--
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.