programing

SQL - GROUP BY 사용 시 여러 값 쉼표로 구분

javamemo 2023. 8. 13. 09:01
반응형

SQL - GROUP BY 사용 시 여러 값 쉼표로 구분

다음과 같은 데이터가 있습니다.

CUSTOMER,  CUSTOMER_ID, PRODUCT
ABC INC    1            XYX
ABC INC    1            ZZZ
DEF CO     2            XYX
DEF CO     2            ZZZ
DEF CO     2            WWW
GHI LLC    3            ZYX

데이터를 다음과 같이 만드는 쿼리를 작성하려고 합니다.

CUSTOMER, CUSTOMER_ID, PRODUCTS
ABC INC   1            XYX, ZZZ
DEF CO    2            XYX, ZZZ, WWW
GHI LLC   3            ZYX

도움이 된다면 Oracle 10g을 사용합니다.MYSQL을 사용하여 작동할 수 있는 것을 보았지만, 일반 SQL 또는 ORACLE과 동등한 것이 필요합니다.저장 프로시저를 만들 수 있는 예도 보았지만, 현재 사용하고 있는 제품으로는 저장 프로시저를 사용할 수 없습니다.

MySQL을 사용할 경우 어떻게 작동합니까?

SELECT CUSTOMER, 
       CUSTOMER_ID, 
       GROUP_CONCAT( PRODUCT ) 
FROM MAGIC_TABLE 
GROUP BY CUSTOMER, CUSTOMER_ID

감사해요.

LISTAGG는 이러한 상황에서 사용하기에 기능별로 가장 적합한 집계 그룹이라고 생각합니다.

  SELECT CUSTOMER, CUSTOMER_ID,
         LISTAGG(PRODUCT, ', ') WITHIN GROUP (ORDER BY PRODUCT)
    FROM SOME_TABLE
GROUP BY CUSTOMER, CUSTOMER_ID
ORDER BY 1, 2

링크는 Oracle에서 이를 수행하는 여러 가지 방법의 예를 나타냅니다.데이터베이스에서 수행할 권한이 있는지 확인합니다.

Oracle 사용자 함수 'wm_concat'은 LISTAGG와 동일하게 작동하지만 기본적으로 구분 기호 ',' 또는 정렬 순서를 지정할 수 없습니다.하지만 10g과 호환됩니다.

나이젤 감사합니다.

SQL이 그렇게 우아하지는 않지만 PLSQL이나 TSQL이 아닌 SQL만 필요한 솔루션이 필요했기 때문에 다음과 같이 되었습니다.

SELECT   CUSTOMER, CUSTOMER_ID, COUNT(PRODUCT) PROD_COUNT, 
         RTRIM( 
            XMLAGG( XMLELEMENT (C, PRODUCT || ',') ORDER BY PRODUCT
).EXTRACT ('//text()'), ',' 
         ) AS PRODUCTS FROM     (
         SELECT   DISTINCT CUSTOMER, CUSTOMER_ID, PRODUCT
         FROM     MAGIC_TABLE
         ) GROUP BY CUSTOMER, CUSTOMER_ID ORDER BY 1 , 2

XML 기능이 정확히 어떤 기능을 하는지는 아직 확실하지 않지만, 필요할 때 자세히 알아보겠습니다.

언급URL : https://stackoverflow.com/questions/234532/sql-multiple-values-comma-separated-when-using-group-by

반응형