Knowledge base / SQL

How GROUP_CONCAT works in SQL? Best GROUP_CONCAT examples

Updated 3 min read

When working with SQL, there are times when we need to combine multiple rows into a single, comma-separated string. This is where GROUP_CONCAT comes into play. It’s one of the most useful aggregation functions in MySQL, allowing us to concatenate values from multiple rows into a single string. Let’s dive deep into how GROUP_CONCAT works.

Understanding GROUP_CONCAT

GROUP_CONCAT is an aggregate function in MySQL that concatenates values from multiple rows into a single string. It is particularly useful when dealing with grouped records and when we want a summarized view of our data.

Basic Syntax

Here’s the basic syntax of GROUP_CONCAT:

SELECT GROUP_CONCAT(column_name)
FROM table_name
GROUP BY another_column;

This function works within the GROUP BY clause, meaning it will aggregate values for each group defined in the query.

Simple Example of GROUP_CONCAT

Let’s consider a simple scenario where we have a table named orders:

id customer_name product
1 Alice Keyboard
2 Alice Mouse
3 Bob Monitor

If I want to list all products ordered by each customer in a single row, I can use GROUP_CONCAT like this:

SELECT customer_name, GROUP_CONCAT(product) AS products_ordered
FROM orders
GROUP BY customer_name;

The result will be:

customer_name products_ordered
Alice Keyboard,Mouse
Bob Monitor

Changing the Separator

By default, GROUP_CONCAT uses a comma (“,”) as the separator. However, you can customize it using the SEPARATOR keyword:

SELECT customer_name, GROUP_CONCAT(product SEPARATOR ' | ') AS products_ordered
FROM orders
GROUP BY customer_name;

The output will be:

customer_name products_ordered
Alice Keyboard | Mouse
Bob Monitor

Ordering Concatenated Results

We can order the concatenated results using the ORDER BY clause inside GROUP_CONCAT:

SELECT customer_name, GROUP_CONCAT(product ORDER BY product ASC) AS products_ordered
FROM orders
GROUP BY customer_name;

This ensures that the products appear in alphabetical order within the concatenated string.

Limiting the Length of GROUP_CONCAT

By default, MySQL has a length limit for the resulting string of GROUP_CONCAT. The default maximum is 1024 characters, but you can increase it if necessary by modifying the group_concat_max_len variable:

SET SESSION group_concat_max_len = 5000;

This setting allows larger concatenated results when needed.

Practical Use Cases

GROUP_CONCAT is useful in many scenarios, including:

  • Generating reports where multiple values need to be combined.
  • Displaying categories or tags associated with a particular item.
  • Creating export-friendly summaries of data.

Combining GROUP_CONCAT with DISTINCT

If you want to remove duplicate values before concatenation, use the DISTINCT keyword:

SELECT customer_name, GROUP_CONCAT(DISTINCT product ORDER BY product ASC) AS unique_products_ordered
FROM orders
GROUP BY customer_name;

This ensures that each product appears only once per customer.

Conclusion

The GROUP_CONCAT function in SQL is a powerful tool that allows you to aggregate and format data efficiently. Whether you’re summarizing reports or simplifying query results, understanding GROUP_CONCAT can significantly improve your SQL querying skills. Mastering its ordering, separators, and length handling will make your queries both more efficient and more readable.

Kajo Rudziński

Newsletter KajoData

Let’s keep in touch.

I write about data analysis, learning and changing careers. My newsletter and the sign-up form are in Polish. If that works for you, I’d be glad to see you there.