sql >> Database >  >> RDS >> Mysql

Voeg resultaten van een query toe aan dezelfde resultaatrij in PostgreSQL - Redshift

PostgreSQL

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

Bewerken :Voor versies van PostgreSQL vóór 9.0 (toen STRING_AGG werd geïntroduceerd) en zelfs vóór 8.4 (toen ARRAY_AGG werd toegevoegd) kun je je eigen aangepaste verzamelfunctie .

Bewerk 2 :Voor versies vóór 8.0 (misschien is Amazon Redshift op de een of andere manier gebaseerd op PostgreSQL 7.4) wordt de $$-syntaxis niet ondersteund, dus de hoofdtekst van de functie moet tussen aanhalingstekens worden geplaatst en aanhalingstekens in de hoofdtekst moeten worden geëscaped.

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

Gebruik dan dat aggregaat.

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;


  1. Wijzigingstijden voor MySQL-gegevensexport

  2. Jaren toevoegen aan een datum in PostgreSQL

  3. PHP/MySQL - SQL-syntaxisfout?

  4. Max echte ruimte in een varbinary (max) in SQL Server