Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

[MYSQL] Extraire les 2 premiers enregistrement d'une table par ordre alphabétique pour chaque lettre

1 réponse
Avatar
messian_nospam
Bonjour,

Je voudrais extraire les 2 premiers enregistrement d'une table par ordre
alphabétique pour chaque lettre.

Actuellement je boucle sur les 26 lettres de l'alphabet et je fais une
requetes à chaque lettre pour sortir les 2 premiers enregistrement pour
la lettre donnée...

Pas terrible... on doit pouvoir faire ça en une seule requêtes, non ?

--
Un moyen de garde pour vos enfants ?
http://www.easynounou.com

1 réponse

Avatar
Fred Brouard - SQLpro
JF Messian a écrit :
Bonjour,

Je voudrais extraire les 2 premiers enregistrement d'une table par ordre
alphabétique pour chaque lettre.

Actuellement je boucle sur les 26 lettres de l'alphabet et je fais une
requetes à chaque lettre pour sortir les 2 premiers enregistrement pour
la lettre donnée...

Pas terrible... on doit pouvoir faire ça en une seule requêtes, non ?




Très facile avec les fonction de fenêtrage de la norme SQL:1999
Mais il faut ajouter une table des lettres (SQL ne sait pas inventer une
info manquante !)

CREATE TABLE T_LETTRE_LET
(LET CHAR(1) NOT NULL PRIMARY KEY);

INSERT INTO T_LETTRE_LET VALUES ('A');
INSERT INTO T_LETTRE_LET VALUES ('B');
INSERT INTO T_LETTRE_LET VALUES ('C');
INSERT INTO T_LETTRE_LET VALUES ('D');
INSERT INTO T_LETTRE_LET VALUES ('E');
INSERT INTO T_LETTRE_LET VALUES ('F');
INSERT INTO T_LETTRE_LET VALUES ('G');
INSERT INTO T_LETTRE_LET VALUES ('H');
INSERT INTO T_LETTRE_LET VALUES ('I');
INSERT INTO T_LETTRE_LET VALUES ('J');
INSERT INTO T_LETTRE_LET VALUES ('K');
INSERT INTO T_LETTRE_LET VALUES ('L');
INSERT INTO T_LETTRE_LET VALUES ('M');
INSERT INTO T_LETTRE_LET VALUES ('N');
INSERT INTO T_LETTRE_LET VALUES ('O');
INSERT INTO T_LETTRE_LET VALUES ('P');
INSERT INTO T_LETTRE_LET VALUES ('Q');
INSERT INTO T_LETTRE_LET VALUES ('A');
INSERT INTO T_LETTRE_LET VALUES ('R');
INSERT INTO T_LETTRE_LET VALUES ('S');
INSERT INTO T_LETTRE_LET VALUES ('T');
INSERT INTO T_LETTRE_LET VALUES ('U');
INSERT INTO T_LETTRE_LET VALUES ('V');
INSERT INTO T_LETTRE_LET VALUES ('W');
INSERT INTO T_LETTRE_LET VALUES ('X');
INSERT INTO T_LETTRE_LET VALUES ('Y');
INSERT INTO T_LETTRE_LET VALUES ('Z');

SELECT LET, PRS_NOM
FROM
(
SELECT LET, PRS_NOM, ROW_NUMBER() OVER(ORDER BY PRS_NOM, PARTITION BY
LET) AS N
FROM T_PERSONNE_PRS AS T
INNER JOIN T_LETTRE_LET AS L
ON T.PRS_NOM LIKE L.LET +'%'
) AS T
WHERE N <= 2;

En revanche je ne sais pas si MySQL connait les fonctions de fenêtrage.
Je crois qu'il est très en retard sur ce genre de sujets...

A +

--
Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL
Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com
Audit, conseil, expertise, formation, modélisation, tuning, optimisation
*********************** http://www.sqlspot.com *************************