sql >> Databasteknik >  >> RDS >> Mysql

Lägg till resultat från en fråga till samma resultatrad i PostgreSQL - Redshift

PostgreSQL

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

Redigera :För versioner av PostgreSQL före 9.0 (när STRING_AGG introducerades) och även före 8.4 (när ARRAY_AGG lades till) kan du skapa din egen anpassad aggregatfunktion .

Redigera 2 :För versioner före 8.0 (kanske Amazon Redshift är baserat på PostgreSQL 7.4 på något sätt) stöds inte $$-syntaxen, så funktionskroppen måste omges av citattecken och citattecken inuti kroppen måste escapes.

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

Använd sedan det aggregatet istället.

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. Tabellen 'performance_schema.session_variables' finns inte

  2. Ska jag lagra landsnamn i MySQL för varje användare?

  3. Fulltextsökning sedan PostgreSQL 8.3

  4. Visa SQL-felmeddelande