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
- [fr-users] Re: [fr-users] Re: [fr-users] Re: [Base] Requête SQL de comptage (continued)
(message not available)
[fr-users] Re: ... · David ROUMANET
Re: [fr-users] [Base] Requête SQL de comptage · Jean-Michel COSTE
Re: [fr-users] [Base] Requête SQL de comptage · Stéphane Santon
Re: [fr-users] [Base] Requête SQL de comptage [Partiellement résolu] · Stéphane Santon
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.