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.