Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Hängen Sie Ergebnisse aus einer Abfrage an dieselbe Ergebniszeile in PostgreSQL – Redshift an

PostgreSQL

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

Bearbeiten :Für Versionen von PostgreSQL vor 9.0 (als STRING_AGG eingeführt wurde) und sogar vor 8.4 (als ARRAY_AGG hinzugefügt wurde) können Sie Ihren eigenen benutzerdefinierte Aggregatfunktion .

Bearbeiten 2 :Für Versionen vor 8.0 (vielleicht basiert Amazon Redshift irgendwie auf PostgreSQL 7.4) wird die $$-Syntax nicht unterstützt, daher muss der Funktionsrumpf in Anführungszeichen eingeschlossen werden, und Anführungszeichen innerhalb des Rumpfs müssen maskiert werden.

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=''
);

Verwenden Sie dann stattdessen dieses Aggregat.

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;