sql >> Databáze >  >> RDS >> Mysql

Připojit výsledky z dotazu ke stejnému řádku výsledků v PostgreSQL - Redshift

PostgreSQL

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

Upravit :Pro verze PostgreSQL před 9.0 (kdy bylo představeno STRING_AGG) a dokonce před 8.4 (když bylo přidáno ARRAY_AGG) si můžete vytvořit svůj vlastní vlastní agregační funkce .

Úprava 2 :U verzí před 8.0 (možná je Amazon Redshift nějak založen na PostgreSQL 7.4) není podporována syntaxe $$, takže tělo funkce musí být uzavřeno v uvozovkách a uvozovky uvnitř těla musí být escapovány.

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

Pak místo toho použijte tento agregát.

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. Vyhledejte ve více tabulkách stejnou hodnotu a získejte tabulku, odkud pochází výsledek

  2. ImportError:Žádný modul s názvem MySQLdb

  3. Příkaz SQL IN - ponechat duplikáty při vracení výsledků

  4. SpringBoot MySQL JDBC Nelze vytvořit počáteční připojení fondu