Skip to main content
Documents
Clauses StatementsKeywordsExpressionsFunctionsIndexesPerformance Optimization

MySQL GROUP BY Clause

The `GROUP BY` clause in MySQL is used to arrange identical data into groups. It is commonly employed with aggregate functions (like `COUNT`, `SUM`, `AVG`) to perform calculations on each group of data.

Usage

The `GROUP BY` clause is used when you need to aggregate data and group rows that have the same values in specified columns. It follows the `FROM` and `WHERE` clauses in a SQL query.


SELECT column1, aggregate_function(column2)
FROM table_name
[WHERE condition]
GROUP BY column1;

In this syntax, `GROUP BY column1` organizes the result set into groups based on the values of `column1`.

Examples

1. Basic Grouping


SELECT department, COUNT(*)
FROM employees
GROUP BY department;

This example counts the number of employees in each department, grouping the data by the `department` column.

2. Grouping with Multiple Columns


SELECT department, job_title, AVG(salary)
FROM employees
GROUP BY department, job_title;

Here, the average salary is calculated for each job title within each department, grouping the data by both `department` and `job_title`.

3. Using GROUP BY with HAVING


SELECT department, SUM(sales)
FROM sales_data
GROUP BY department
HAVING SUM(sales) > 10000;

This example groups the data by `department` and then filters the groups using `HAVING`, only displaying those departments with total sales greater than 10,000.

Tips and Best Practices

  • Ensure column consistency. Only include non-aggregated columns in the `GROUP BY` clause to avoid errors. If non-aggregated columns are included in the `SELECT` clause without being specified in the `GROUP BY` clause, it may lead to unexpected results or errors.
  • Use aggregate functions. Pair `GROUP BY` with aggregate functions to summarize data effectively.
  • Order groups logically. Use `ORDER BY` after `GROUP BY` to sort the results for better readability.
  • Filter groups with HAVING. Utilize `HAVING` instead of `WHERE` to filter results based on aggregate calculations. Remember, `WHERE` filters rows before grouping, while `HAVING` filters groups after aggregation.
  • Consider performance. When using `GROUP BY` on large datasets, be aware of the potential impact on query execution time. Consider optimization strategies, such as indexing, to improve performance.

SQL Upskilling for Beginners

Gain the SQL skills to interact with and query your data.
Start Learning for Free