GROUP_CONCAT et son utilisation
GROUP_CONCAT est une fonction d'agrégation (comme COUNT, MAX, etc.) permettant de concaténer tous les enregistrements des groupes définis par la clause GROUP BY.
En d'autres termes, GROUP_CONCAT est à CONCAT ce que SUM est à l'opérateur +.
Exemple :
CREATE TABLE groupe utilisateur (
ID_GROUPE INT AUTO_INCREMENT NOT NULL,
LIBELLE_GROUPE VARCHAR(50),
PRIMARY KEY (ID_GROUPE)
);
CREATE TABLE utilisateur (
ID_USER INT AUTO_INCREMENT NOT NULL,
NOM_USER VARCHAR(50) NOT NULL,
ID_GROUPE INT NOT NULL,
PRIMARY KEY (ID_USER),
FOREIGN KEY (ID_GROUPE) REFERENCES groupe_utilisateur (ID_GROUPE)
);
INSERT INTO groupe_utilisateur (LIBELLE_GROUPE) VALUES
('utilisateurs'), ('administrateurs');
INSERT INTO utilisateur (NOM_USER, ID_GROUPE) VALUES
('bob', 1), ('toto', 1), ('bibi', 1), ('superuser', 2), ('directeur', 2);
Utilisation de la fonction GROUP_CONCAT (avec ses deux options SEPARATOR et ORDER BY) :
SELECT LIBELLE_GROUPE, GROUP_CONCAT(NOM_USER SEPARATOR ":" ORDER BY NOM_USER) AS LIST_USERS
FROM utilisateur
INNER JOIN groupe_utilisateur USING (ID_GROUPE)
GROUP BY (utilisateur.ID_GROUPE)
En d'autres termes, GROUP_CONCAT est à CONCAT ce que SUM est à l'opérateur +.
Exemple :
CREATE TABLE groupe utilisateur (
ID_GROUPE INT AUTO_INCREMENT NOT NULL,
LIBELLE_GROUPE VARCHAR(50),
PRIMARY KEY (ID_GROUPE)
);
CREATE TABLE utilisateur (
ID_USER INT AUTO_INCREMENT NOT NULL,
NOM_USER VARCHAR(50) NOT NULL,
ID_GROUPE INT NOT NULL,
PRIMARY KEY (ID_USER),
FOREIGN KEY (ID_GROUPE) REFERENCES groupe_utilisateur (ID_GROUPE)
);
INSERT INTO groupe_utilisateur (LIBELLE_GROUPE) VALUES
('utilisateurs'), ('administrateurs');
INSERT INTO utilisateur (NOM_USER, ID_GROUPE) VALUES
('bob', 1), ('toto', 1), ('bibi', 1), ('superuser', 2), ('directeur', 2);
Utilisation de la fonction GROUP_CONCAT (avec ses deux options SEPARATOR et ORDER BY) :
SELECT LIBELLE_GROUPE, GROUP_CONCAT(NOM_USER SEPARATOR ":" ORDER BY NOM_USER) AS LIST_USERS
FROM utilisateur
INNER JOIN groupe_utilisateur USING (ID_GROUPE)
GROUP BY (utilisateur.ID_GROUPE)
On obtient alors :
LIBELLE_GROUPE : utilisateurs | LIST_USERS : bibi:bob:toto
LIBELLE_GROUPE : administrateurs | LIST_USERS : directeur:superuser
GROUP_CONCAT est spécifique à MySQL.
LIBELLE_GROUPE : utilisateurs | LIST_USERS : bibi:bob:toto
LIBELLE_GROUPE : administrateurs | LIST_USERS : directeur:superuser
GROUP_CONCAT est spécifique à MySQL.