string_agg ()에서 결과를 정렬하는 방법


99

테이블이 있습니다.

CREATE TABLE tblproducts
(
productid integer,
product character varying(20)
)

행으로 :

INSERT INTO tblproducts(productid, product) VALUES (1, 'CANDID POWDER 50 GM');
INSERT INTO tblproducts(productid, product) VALUES (2, 'SINAREST P SYP 100 ML');
INSERT INTO tblproducts(productid, product) VALUES (3, 'ESOZ D 20 MG CAP');
INSERT INTO tblproducts(productid, product) VALUES (4, 'HHDERM CREAM 10 GM');
INSERT INTO tblproducts(productid, product) VALUES (5, 'CREAM 15 GM');
INSERT INTO tblproducts(productid, product) VALUES (6, 'KZ LOTION 50 ML');
INSERT INTO tblproducts(productid, product) VALUES (7, 'BUDECORT 200 Rotocap');

내가 실행 string_agg()하면 tblproducts:

SELECT string_agg(product, ' | ') FROM "tblproducts"

다음 결과를 반환합니다.

CANDID POWDER 50 GM | ESOZ D 20 MG CAP | HHDERM CREAM 10 GM | CREAM 15 GM | KZ LOTION 50 ML | BUDECORT 200 Rotocap

집계 된 문자열을 사용하는 순서대로 정렬하려면 어떻게해야 ORDER BY product합니까?

PostgreSQL 9.2.4를 사용하고 있습니다.

답변:


225

postgres 9.0 이상에서는 다음과 같이 작성할 수 있습니다.

select string_agg(product,' | ' order by product) from "tblproducts"

자세한 내용은 여기 .


창 기능을 사용할 때도 작동하는 솔루션을 제안 해 주시겠습니까?
— Saurabh Gujarani

링크 주셔서 감사합니다. string_agg문서에서 검색 한다고해서 거기로 가지 않습니다.
— Manngo

33

https://docs.microsoft.com/en-us/sql/t-sql/functions/string-agg-transact-sql?view=sql-server-2017

SELECT
  STRING_AGG(prod, '|') WITHIN GROUP (ORDER BY product)
FROM ... 

3
질문은 PostgreSQL에 관한 것이 었습니다. 이 WITHIN GROUP절은 string_aggMicrosoft SQL 에서처럼 함수에 적용되지 않습니다 .
— Manngo

6
질문은 string_agg에 관한 것이 었습니다. Postgres는 그의 질문에 부수적이며 마지막으로 언급했습니다. 이 질문은 다른 사람들에게도 유용합니다.
— nomen

1
이 구문에서 구문 오류가 발생하면 호환성 수준을 확인하십시오. stackoverflow.com/questions/43611024/…
— Mr. TA

4
select string_agg(prod,' | ') FROM 
  (SELECT product as prod FROM tblproducts ORDER BY product )MAIN;

SQL FIDDLE


2
나는 OP와 같은 문제를 가지고 있었고,이 접근법은 나의 첫 번째 생각 이었지만, 불행히도 그것은 작동하지 않는 반면 Igor는 작동합니다.
— chbrown

제 입장에서는 두 가지 접근 방식 (Ilesh와 Igor)이 모두 작동했습니다.
— Stephan

3
잘못된 답변. 작동 할 수 있지만 작동이 보장되지는 않습니다.
— zyamys

관계형 데이터베이스는 부분적으로 수학적 집합을 기반으로하며 SQL의 기본 원칙은 행 순서가 중요하지 않다는 사실에 반영됩니다. ORDER BY하위 쿼리에 절 을 포함하더라도 FROM절이 반드시 데이터를 순서대로 가져 오는 것은 아닙니다. 이것이 효과가 있다면 그것은 순수한 행운입니다.
— Manngo
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.