Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Anexar resultados de uma consulta à mesma linha de resultado no PostgreSQL - Redshift

PostgreSQL

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

Editar :Para versões do PostgreSQL anteriores a 9.0 (quando STRING_AGG foi introduzido) e mesmo antes de 8.4 (quando ARRAY_AGG foi adicionado) você pode criar seu próprio função de agregação personalizada .

Editar 2 :para versões anteriores a 8.0 (talvez o Amazon Redshift seja baseado no PostgreSQL 7.4 de alguma forma), a sintaxe $$ não é compatível, portanto, o corpo da função precisa ser colocado entre aspas e as aspas dentro do corpo precisam ser escapadas.
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=''
);

Em seguida, use esse agregado em vez disso.
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;