Todos os produtos
Search
Central de documentação

MaxCompute:Implementar funcionalidades da função GROUP_CONCAT

Última atualização: Jun 26, 2026

A GROUP_CONCAT é uma função de agregação do MySQL que concatena valores de coluna de várias linhas em cada grupo gerado por GROUP BY, formando uma única string. Use essa função para combinar vários registros de dados em um só. No MaxCompute, utilize a função WM_CONCAT para obter o mesmo resultado da GROUP_CONCAT.

Exemplo

Uma tabela chamada price_total contém as colunas name, price e saleid com os seguintes dados:

+--------+------------+------------+
| name   | price      | saleid     |
+--------+------------+------------+
| bag    | 50         | 1          |
| sugar  | 20         | 3          |
| noodle | 2          | 4          |
| potato | 5          | 6          |
| bag    | 100        | 2          |
| sugar  | 10         | 4          |
| potato | 4          | 3          |
| sugar  | 50         | 7          |
| noodle | 2          | 5          |
| noodle | 5          | 1          |
+--------+------------+------------+

Neste exemplo, todos os produtos são agrupados pelo nome do produto (coluna name). Utilize a função GROUP_CONCAT no MySQL para atender aos seguintes requisitos:

  • Requisito 1: Mesclar os valores na coluna price do mesmo grupo. Os resultados retornados contêm valores duplicados. Instrução de exemplo:

    SELECT name, group_concat(price) FROM price_total GROUP BY name;
  • Requisito 2: Mesclar os valores na coluna price do mesmo grupo. Os resultados retornados não contêm valores duplicados. Instrução de exemplo:

    SELECT name, group_concat(distinct price) FROM price_total GROUP BY name;
  • Requisito 3: Mesclar e ordenar os valores na coluna price do mesmo grupo. Os resultados retornados contêm valores duplicados. Instrução de exemplo:

    SELECT name, group_concat(price ORDER BY price desc) FROM price_total GROUP BY name;
  • Requisito 4: Mesclar e ordenar os valores na coluna price do mesmo grupo. Os resultados retornados não contêm valores duplicados. Instrução de exemplo:

    SELECT name, group_concat(distinct price ORDER BY price desc) FROM price_total GROUP BY name;
  • Requisito 5: Mesclar os valores das colunas price e saleid do mesmo grupo. Instrução de exemplo:

    SELECT name, group_concat(concat_ws(':', price, saleid)) FROM price_total GROUP BY name;

Solução

O MaxCompute não oferece suporte à função GROUP_CONCAT. Para atender aos requisitos deste exemplo, use a função WM_CONCAT.

Observe que a função WM_CONCAT não é equivalente à função GROUP_CONCAT. A tabela a seguir descreve as capacidades dessas funções.

Capacidade

WM_CONCAT

GROUP_CONCAT

Descrição

Deduplicação com DISTINCT

已开通

已开通

Nenhuma.

Delimitador

已开通

已开通

Use um delimitador para concatenar os valores a serem mesclados. Considere os pontos a seguir ao incluir delimitadores nas funções WM_CONCAT e GROUP_CONCAT:

  • Os delimitadores são obrigatórios na função WM_CONCAT.

  • Os delimitadores são opcionais na função GROUP_CONCAT. Se omitidos, vírgulas (,) serão usadas como delimitadores.

Ordenação

已开通

已开通

Para ordenar valores, adote um dos métodos abaixo:

  • Ordene os campos que deseja mesclar e, em seguida, realize a mesclagem.

  • Utilize funções definidas pelo usuário (UDFs). Para mais informações sobre UDFs, consulte MaxCompute UDF.

Mesclagem de várias colunas

已开通

已开通

As funções WM_CONCAT e GROUP_CONCAT servem para mesclar linhas. Combine-as com a função CONCAT ou CONCAT_WS, usadas para mesclar colunas, permitindo unir valores de múltiplas colunas em diferentes grupos.

Com base nas capacidades descritas na tabela anterior, utilize a função WM_CONCAT para atender aos seguintes requisitos:

  • Requisito 1: Mesclar os valores na coluna price do mesmo grupo. Os resultados retornados contêm valores duplicados.

    SELECT name, wm_concat(',', price) AS price_new FROM price_total GROUP BY name;

    Resultado retornado:

    +--------+-----------+
    | name   | price_new |
    +--------+-----------+
    | bag    | 50,100    |
    | noodle | 2,2,5     |
    | potato | 5,4       |
    | sugar  | 20,10,50  |
    +--------+-----------+
    
  • Requisito 2: Mesclar os valores na coluna price do mesmo grupo. Os resultados retornados não contêm valores duplicados.

    SELECT name, wm_concat(distinct ',', price) AS price_new FROM price_total GROUP BY name;

    Resultado retornado:

    +--------+-----------+
    | name   | price_new |
    +--------+-----------+
    | bag    | 100,50    |
    | noodle | 2,5       |
    | potato | 4,5       |
    | sugar  | 10,20,50  |
    +--------+-----------+
  • Requisito 3: Mesclar e ordenar os valores na coluna price do mesmo grupo. Os resultados retornados contêm valores duplicados.

    • Método 1:

      SELECT name, wm_concat(',', price) WITHIN GROUP (ORDER BY price desc) AS price_new 
      FROM (SELECT name, price FROM price_total) GROUP BY name;
    • Método 2:

      SELECT name, wm_concat(',', price) AS price_new 
      FROM (SELECT name, price FROM price_total ORDER BY name, price desc LIMIT 100) GROUP BY name;
    • Resultado retornado:

      +--------+-----------+
      | name   | price_new |
      +--------+-----------+
      | bag    | 100,50    |
      | noodle | 5,2,2     |
      | potato | 5,4       |
      | sugar  | 50,20,10  |
      +--------+-----------+
  • Requisito 4: Mesclar e ordenar os valores na coluna price do mesmo grupo. Os resultados retornados não contêm valores duplicados.

    • Método 1:

      SELECT name, wm_concat(',', price)  within GROUP (ORDER BY price asc)
      FROM (SELECT DISTINCT name, price FROM price_total) GROUP BY name;
    • Método 2:

      SELECT name, wm_concat(',', price) AS price_new 
      FROM (SELECT DISTINCT name, price FROM price_total ORDER BY name, price asc LIMIT 100) GROUP BY name;
    • Resultado retornado:

      +--------+-----------+
      | name   | price_new |
      +--------+-----------+
      | bag    | 50,100    |
      | noodle | 2,5       |
      | potato | 4,5       |
      | sugar  | 10,20,50  |
      +--------+-----------+
  • Requisito 5: Mesclar os valores das colunas price e saleid do mesmo grupo.

    SELECT name, wm_concat(',', concat_ws(':',price,saleid)) AS price_new FROM price_total GROUP BY name;
    -- The preceding statement is equivalent to the following statement: 
    SELECT name, wm_concat(',', concat(price,':',saleid)) FROM price_total GROUP BY name;

    Resultado retornado:

    +--------+-----------------+
    | name   | price_new       |
    +--------+-----------------+
    | bag    | 50:1,100:2      |
    | noodle | 2:4,2:5,5:1     |
    | potato | 5:6,4:3         |
    | sugar  | 20:3,10:4,50:7  |
    +--------+-----------------+

Referências