Skip to main content
Documents
Share
LinkedIn
Facebook
Twitter
Copy
ClausesStatementsKeywordsExpressionsFunctions

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.