Maison >base de données >tutoriel mysql >Comment concaténer des chaînes dans une requête PostgreSQL « group by » ?
group by
requêteLors du traitement de données dans une base de données PostgreSQL, vous devrez peut-être concaténer des chaînes pour des champs spécifiques dans une requête group by
. Cela peut être réalisé de différentes manières, selon la version de PostgreSQL.
Les versions modernes de PostgreSQL (publiées après 2010) fournissent la fonction string_agg(expression, delimiter)
. Cette fonction permet de concaténer des chaînes dans des requêtes group by
, séparées par des délimiteurs spécifiés.
Par exemple, pour joindre les champs COMPANY_ID
dans chaque EMPLOYEE
groupe, vous pouvez utiliser la requête suivante :
<code class="language-sql">SELECT company_id, string_agg(employee, ', ') FROM mytable GROUP BY company_id;</code>
Dans PostgreSQL 8.4, vous pouvez utiliser array_agg(expression)
fonctions d'agrégation pour collecter des valeurs dans un tableau. Le tableau peut ensuite être converti en chaîne concaténée à l'aide de la fonction array_to_string()
:
<code class="language-sql">SELECT company_id, array_to_string(array_agg(employee), ', ') FROM mytable GROUP BY company_id;</code>
Dans les anciennes versions de PostgreSQL, il n'y a pas de fonction d'agrégation intégrée pour la concaténation de chaînes. Une implémentation personnalisée implique la création d'une fonction d'agrégation personnalisée à l'aide de la fonction textcat
:
<code class="language-sql">CREATE AGGREGATE textcat_all( basetype = text, sfunc = textcat, stype = text, initcond = '' );</code>
De plus, une fonction de connexion personnalisée peut être créée pour gérer des besoins spécifiques, tels que l'ignorance des valeurs nulles ou des chaînes vides :
<code class="language-sql">CREATE FUNCTION commacat_ignore_nulls(acc text, instr text) RETURNS text AS $$ BEGIN IF acc IS NULL OR acc = '' THEN RETURN instr; ELSIF instr IS NULL OR instr = '' THEN RETURN acc; ELSE RETURN acc || ', ' || instr; END IF; END; $$ LANGUAGE plpgsql;</code>
Grâce à cette fonction, vous pouvez modifier la requête comme suit :
<code class="language-sql">SELECT company_id, commacat_ignore_nulls(employee) FROM mytable GROUP BY company_id;</code>
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!