PostgreSQL
SELECT
a,
STRING_AGG('(' || c || ',' || b || ')', ' ; ')
FROM
tbl
GROUP BY
a;
編集 :9.0より前のバージョン(STRING_AGGが導入されたとき)および8.4より前(ARRAY_AGGが追加されたとき)のPostgreSQLのバージョンでは、独自のカスタム集計関数 。
編集2 :8.0より前のバージョン(おそらくAmazonRedshiftはPostgreSQL7.4に基づいている)の場合、$$構文はサポートされていないため、関数本体を引用符で囲み、本文内の引用符をエスケープする必要があります。
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=''
);
次に、代わりにその集計を使用します。
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;