Mysql
 sql >> Base de données >  >> RDS >> Mysql

Ajouter les résultats d'une requête à la même ligne de résultat dans PostgreSQL - Redshift

PostgreSQL

SELECT
  a,
  STRING_AGG('(' || c || ',' || b || ')', ' ; ')
FROM
  tbl
GROUP BY
  a;

Modifier :Pour les versions de PostgreSQL antérieures à 9.0 (lorsque STRING_AGG a été introduit) et même avant 8.4 (lorsque ARRAY_AGG a été ajouté), vous pouvez créer votre propre fonction d'agrégation personnalisée .

Modifier 2  :Pour les versions antérieures à 8.0 (peut-être qu'Amazon Redshift est basé sur PostgreSQL 7.4 d'une manière ou d'une autre), la syntaxe $$ n'est pas prise en charge. Le corps de la fonction doit donc être entre guillemets et les guillemets à l'intérieur du corps doivent être échappés.

CREATE FUNCTION cut_semicolon(text) RETURNS text AS '
BEGIN
  RETURN SUBSTRING($1 FROM 4);
END;
' LANGUAGE 'plpgsql' IMMUTABLE;


CREATE FUNCTION concat_semicolon(text, text) RETURNS text AS '
BEGIN
  RETURN $1 || '' ; '' || $2;
END;
' LANGUAGE 'plpgsql' IMMUTABLE;

CREATE AGGREGATE concat_semicolon(
  BASETYPE=text,
  SFUNC=concat_semicolon,
  STYPE=text,
  FINALFUNC=cut_semicolon,
  INITCOND=''
);

Utilisez ensuite cet agrégat à la place.

SELECT
  a,
  CONCAT_SEMICOLON('(' || c || ',' || b || ')')
FROM
  tbl
GROUP BY
  a;

MySQL

SELECT
  a,
  GROUP_CONCAT(CONCAT('(', c, ',', b, ')') SEPARATOR ' ; ')
FROM
  tbl
GROUP BY
  a;