Introduction
The GROUP BY
statement in SQL is used to arrange identical data into groups. This statement is often used with aggregate functions (COUNT
, SUM
, MAX
, MIN
, AVG
) to perform an operation on each group of data. The GROUP BY
statement is a powerful tool for summarizing or aggregating data, enabling you to quickly extract insights from your datasets.
Use of GROUP BY
- Aggregating Data: To calculate aggregate values like total sales, average price, maximum or minimum value within each group.
- Reporting and Analysis: For creating reports that summarize data in a meaningful way, such as sales per region, average salary by department, or total hours worked per project.
- Data Organization: Helps in organizing data in a structured format, making it easier to understand and analyze.
Basic Syntax
The basic syntax of the GROUP BY
statement is as follows:
SELECT column_name(s), AGGREGATE_FUNCTION(column_name)
FROM table_name
WHERE condition
GROUP BY column_name(s);
Examples
Counting the Number of Employees in Each Department
SELECT department, COUNT(employee_id) AS employee_count
FROM employees
GROUP BY department;
This query counts the number of employees in each department by grouping records based on the department column.
Calculating Average Salary by Department
SELECT department, AVG(salary) AS average_salary
FROM employees
GROUP BY department;
Here, the average salary for each department is calculated by grouping employees by their department.
Finding Maximum Sale in Each Region
SELECT region, MAX(sale_amount) AS max_sale
FROM sales
GROUP BY region;
This query finds the maximum sale amount in each region by grouping sales data by the region.
Summing Total Sales by Date
SELECT sale_date, SUM(sale_amount) AS total_sales
FROM sales
GROUP BY sale_date;
This example sums up the total sales for each date, providing a daily sales report.
Points to Remember
- The columns listed in the
GROUP BY
clause must also be listed in the SELECT
statement unless they are used in an aggregate function.
- You can group by multiple columns by separating column names with commas, which allows for more granular grouping.
- The
HAVING
clause can be used in conjunction with GROUP BY
to filter groups based on a condition applied to aggregated data.
The GROUP BY
statement, combined with aggregate functions and filtering clauses like WHERE
and HAVING
, gives SQL a powerful capability to perform complex data analysis and reporting directly from the database.
Tutorial
In this tutorial, Khoury Boston’s Prof. Schedlbauer demonstrates how to organize data into groups using GROUP BY and perform selection and aggregation on groups.
Covers: SELECT, WHERE, GROUP BY, HAVING
LS0tCnRpdGxlOiAiR3JvdXBpbmcgRGF0YSB3aXRoIEdST1VQIEJZIgpwYXJhbXM6CiAgY2F0ZWdvcnk6IDcwCiAgbnVtYmVyOiAxMDQKICB0aW1lOiAzMAogIGxldmVsOiBiZWdpbm5lcgogIHRhZ3M6ICJzcWwsU0VMRUNULEFTLExJTUlULE9SREVSIEJZLERJU1RJTkNUIgogIGRlc2NyaXB0aW9uOiAiRXhwbGFpbnMgaG93IHRvIGdyb3VwIGRhdGEgdXNpbmcgR1JPVVAgQlkgaW4gU1FMIgpkYXRlOiAiPHNtYWxsPmByIFN5cy5EYXRlKClgPC9zbWFsbD4iCmF1dGhvcjogIjxzbWFsbD5NYXJ0aW4gU2NoZWRsYmF1ZXI8L3NtYWxsPiIKZW1haWw6ICJtLnNjaGVkbGJhdWVyQG5ldS5lZHUiCmFmZmlsaXRhdGlvbjogIk5vcnRoZWFzdGVybiBVbml2ZXJzaXR5IgpvdXRwdXQ6IAogIGJvb2tkb3duOjpodG1sX2RvY3VtZW50MjoKICAgIHRvYzogdHJ1ZQogICAgdG9jX2Zsb2F0OiB0cnVlCiAgICBjb2xsYXBzZWQ6IGZhbHNlCiAgICBudW1iZXJfc2VjdGlvbnM6IGZhbHNlCiAgICBjb2RlX2Rvd25sb2FkOiB0cnVlCiAgICB0aGVtZTogc3BhY2VsYWIKICAgIGhpZ2hsaWdodDogdGFuZ28KLS0tCgotLS0KdGl0bGU6ICI8c21hbGw+YHIgcGFyYW1zJGNhdGVnb3J5YC5gciBwYXJhbXMkbnVtYmVyYDwvc21hbGw+PGJyLz48c3BhbiBzdHlsZT0nY29sb3I6ICMyRTQwNTM7IGZvbnQtc2l6ZTogMC45ZW0nPmByIHJtYXJrZG93bjo6bWV0YWRhdGEkdGl0bGVgPC9zcGFuPiIKLS0tCgpgYGB7ciBjb2RlPXhmdW46OnJlYWRfdXRmOChwYXN0ZTAoaGVyZTo6aGVyZSgpLCcvUi9faW5zZXJ0MkRCLlInKSksIGluY2x1ZGUgPSBGQUxTRX0KYGBgCgojIyBJbnRyb2R1Y3Rpb24KClRoZSBgR1JPVVAgQllgIHN0YXRlbWVudCBpbiBTUUwgaXMgdXNlZCB0byBhcnJhbmdlIGlkZW50aWNhbCBkYXRhIGludG8gZ3JvdXBzLiBUaGlzIHN0YXRlbWVudCBpcyBvZnRlbiB1c2VkIHdpdGggYWdncmVnYXRlIGZ1bmN0aW9ucyAoYENPVU5UYCwgYFNVTWAsIGBNQVhgLCBgTUlOYCwgYEFWR2ApIHRvIHBlcmZvcm0gYW4gb3BlcmF0aW9uIG9uIGVhY2ggZ3JvdXAgb2YgZGF0YS4gVGhlIGBHUk9VUCBCWWAgc3RhdGVtZW50IGlzIGEgcG93ZXJmdWwgdG9vbCBmb3Igc3VtbWFyaXppbmcgb3IgYWdncmVnYXRpbmcgZGF0YSwgZW5hYmxpbmcgeW91IHRvIHF1aWNrbHkgZXh0cmFjdCBpbnNpZ2h0cyBmcm9tIHlvdXIgZGF0YXNldHMuCgojIyMgVXNlIG9mIGBHUk9VUCBCWWAKCi0gICAqKkFnZ3JlZ2F0aW5nIERhdGEqKjogVG8gY2FsY3VsYXRlIGFnZ3JlZ2F0ZSB2YWx1ZXMgbGlrZSB0b3RhbCBzYWxlcywgYXZlcmFnZSBwcmljZSwgbWF4aW11bSBvciBtaW5pbXVtIHZhbHVlIHdpdGhpbiBlYWNoIGdyb3VwLgotICAgKipSZXBvcnRpbmcgYW5kIEFuYWx5c2lzKio6IEZvciBjcmVhdGluZyByZXBvcnRzIHRoYXQgc3VtbWFyaXplIGRhdGEgaW4gYSBtZWFuaW5nZnVsIHdheSwgc3VjaCBhcyBzYWxlcyBwZXIgcmVnaW9uLCBhdmVyYWdlIHNhbGFyeSBieSBkZXBhcnRtZW50LCBvciB0b3RhbCBob3VycyB3b3JrZWQgcGVyIHByb2plY3QuCi0gICAqKkRhdGEgT3JnYW5pemF0aW9uKio6IEhlbHBzIGluIG9yZ2FuaXppbmcgZGF0YSBpbiBhIHN0cnVjdHVyZWQgZm9ybWF0LCBtYWtpbmcgaXQgZWFzaWVyIHRvIHVuZGVyc3RhbmQgYW5kIGFuYWx5emUuCgojIyMgQmFzaWMgU3ludGF4CgpUaGUgYmFzaWMgc3ludGF4IG9mIHRoZSBgR1JPVVAgQllgIHN0YXRlbWVudCBpcyBhcyBmb2xsb3dzOgoKYGBgIHNxbApTRUxFQ1QgY29sdW1uX25hbWUocyksIEFHR1JFR0FURV9GVU5DVElPTihjb2x1bW5fbmFtZSkKRlJPTSB0YWJsZV9uYW1lCldIRVJFIGNvbmRpdGlvbgpHUk9VUCBCWSBjb2x1bW5fbmFtZShzKTsKYGBgCgojIyMgRXhhbXBsZXMKCjEuICAqKkNvdW50aW5nIHRoZSBOdW1iZXIgb2YgRW1wbG95ZWVzIGluIEVhY2ggRGVwYXJ0bWVudCoqCgogICAgYGBgIHNxbAogICAgU0VMRUNUIGRlcGFydG1lbnQsIENPVU5UKGVtcGxveWVlX2lkKSBBUyBlbXBsb3llZV9jb3VudAogICAgRlJPTSBlbXBsb3llZXMKICAgIEdST1VQIEJZIGRlcGFydG1lbnQ7CiAgICBgYGAKCiAgICBUaGlzIHF1ZXJ5IGNvdW50cyB0aGUgbnVtYmVyIG9mIGVtcGxveWVlcyBpbiBlYWNoIGRlcGFydG1lbnQgYnkgZ3JvdXBpbmcgcmVjb3JkcyBiYXNlZCBvbiB0aGUgZGVwYXJ0bWVudCBjb2x1bW4uCgoyLiAgKipDYWxjdWxhdGluZyBBdmVyYWdlIFNhbGFyeSBieSBEZXBhcnRtZW50KioKCiAgICBgYGAgc3FsCiAgICBTRUxFQ1QgZGVwYXJ0bWVudCwgQVZHKHNhbGFyeSkgQVMgYXZlcmFnZV9zYWxhcnkKICAgIEZST00gZW1wbG95ZWVzCiAgICBHUk9VUCBCWSBkZXBhcnRtZW50OwogICAgYGBgCgogICAgSGVyZSwgdGhlIGF2ZXJhZ2Ugc2FsYXJ5IGZvciBlYWNoIGRlcGFydG1lbnQgaXMgY2FsY3VsYXRlZCBieSBncm91cGluZyBlbXBsb3llZXMgYnkgdGhlaXIgZGVwYXJ0bWVudC4KCjMuICAqKkZpbmRpbmcgTWF4aW11bSBTYWxlIGluIEVhY2ggUmVnaW9uKioKCiAgICBgYGAgc3FsCiAgICBTRUxFQ1QgcmVnaW9uLCBNQVgoc2FsZV9hbW91bnQpIEFTIG1heF9zYWxlCiAgICBGUk9NIHNhbGVzCiAgICBHUk9VUCBCWSByZWdpb247CiAgICBgYGAKCiAgICBUaGlzIHF1ZXJ5IGZpbmRzIHRoZSBtYXhpbXVtIHNhbGUgYW1vdW50IGluIGVhY2ggcmVnaW9uIGJ5IGdyb3VwaW5nIHNhbGVzIGRhdGEgYnkgdGhlIHJlZ2lvbi4KCjQuICAqKlN1bW1pbmcgVG90YWwgU2FsZXMgYnkgRGF0ZSoqCgogICAgYGBgIHNxbAogICAgU0VMRUNUIHNhbGVfZGF0ZSwgU1VNKHNhbGVfYW1vdW50KSBBUyB0b3RhbF9zYWxlcwogICAgRlJPTSBzYWxlcwogICAgR1JPVVAgQlkgc2FsZV9kYXRlOwogICAgYGBgCgogICAgVGhpcyBleGFtcGxlIHN1bXMgdXAgdGhlIHRvdGFsIHNhbGVzIGZvciBlYWNoIGRhdGUsIHByb3ZpZGluZyBhIGRhaWx5IHNhbGVzIHJlcG9ydC4KCiMjIyBQb2ludHMgdG8gUmVtZW1iZXIKCi0gICBUaGUgY29sdW1ucyBsaXN0ZWQgaW4gdGhlIGBHUk9VUCBCWWAgY2xhdXNlIG11c3QgYWxzbyBiZSBsaXN0ZWQgaW4gdGhlIGBTRUxFQ1RgIHN0YXRlbWVudCB1bmxlc3MgdGhleSBhcmUgdXNlZCBpbiBhbiBhZ2dyZWdhdGUgZnVuY3Rpb24uCi0gICBZb3UgY2FuIGdyb3VwIGJ5IG11bHRpcGxlIGNvbHVtbnMgYnkgc2VwYXJhdGluZyBjb2x1bW4gbmFtZXMgd2l0aCBjb21tYXMsIHdoaWNoIGFsbG93cyBmb3IgbW9yZSBncmFudWxhciBncm91cGluZy4KLSAgIFRoZSBgSEFWSU5HYCBjbGF1c2UgY2FuIGJlIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCBgR1JPVVAgQllgIHRvIGZpbHRlciBncm91cHMgYmFzZWQgb24gYSBjb25kaXRpb24gYXBwbGllZCB0byBhZ2dyZWdhdGVkIGRhdGEuCgpUaGUgYEdST1VQIEJZYCBzdGF0ZW1lbnQsIGNvbWJpbmVkIHdpdGggYWdncmVnYXRlIGZ1bmN0aW9ucyBhbmQgZmlsdGVyaW5nIGNsYXVzZXMgbGlrZSBgV0hFUkVgIGFuZCBgSEFWSU5HYCwgZ2l2ZXMgU1FMIGEgcG93ZXJmdWwgY2FwYWJpbGl0eSB0byBwZXJmb3JtIGNvbXBsZXggZGF0YSBhbmFseXNpcyBhbmQgcmVwb3J0aW5nIGRpcmVjdGx5IGZyb20gdGhlIGRhdGFiYXNlLgoKIyMgVHV0b3JpYWwKCkluIHRoaXMgdHV0b3JpYWwsIEtob3VyeSBCb3N0b24ncyBQcm9mLiBTY2hlZGxiYXVlciBkZW1vbnN0cmF0ZXMgaG93IHRvIG9yZ2FuaXplIGRhdGEgaW50byBncm91cHMgdXNpbmcgR1JPVVAgQlkgYW5kIHBlcmZvcm0gc2VsZWN0aW9uIGFuZCBhZ2dyZWdhdGlvbiBvbiBncm91cHMuCgo8aWZyYW1lIHN0eWxlPSJib3JkZXI6IDFweCBzb2xpZCAjNDY0NjQ2OyIgc3JjPSJodHRwczovL25vcnRoZWFzdGVybi5ob3N0ZWQucGFub3B0by5jb20vUGFub3B0by9QYWdlcy9FbWJlZC5hc3B4P2lkPWQxMjAwMDU2LTNmN2ItNDZjZC1iOTYwLWFjOTkwMGVjOTA0NSZhbXA7YXV0b3BsYXk9ZmFsc2UmYW1wO29mZmVydmlld2VyPXRydWUmYW1wO3Nob3d0aXRsZT1mYWxzZSZhbXA7c2hvd2JyYW5kPWZhbHNlJmFtcDtzdGFydD0wJmFtcDtpbnRlcmFjdGl2aXR5PWFsbCIgd2lkdGg9IjQ4MCIgaGVpZ2h0PSIyNzAiIGFsbG93ZnVsbHNjcmVlbj0iYWxsb3dmdWxsc2NyZWVuIiBhbGxvdz0iYXV0b3BsYXkiIGRhdGEtZXh0ZXJuYWw9IjEiPgoKPC9pZnJhbWU+CgoqKkNvdmVycyoqOiBTRUxFQ1QsIFdIRVJFLCBHUk9VUCBCWSwgSEFWSU5HCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCiMjIEZpbGVzICYgUmVzb3VyY2VzCgpgYGB7ciB6aXBGaWxlcywgZWNobz1GQUxTRX0KemlwTmFtZSA9IHNwcmludGYoIkxlc3NvbkZpbGVzLSVzLSVzLnppcCIsIAogICAgICAgICAgICAgICAgIHBhcmFtcyRjYXRlZ29yeSwKICAgICAgICAgICAgICAgICBwYXJhbXMkbnVtYmVyKQoKdGV4dEFMaW5rID0gcGFzdGUwKCJBbGwgRmlsZXMgZm9yIExlc3NvbiAiLCAKICAgICAgICAgICAgICAgcGFyYW1zJGNhdGVnb3J5LCIuIixwYXJhbXMkbnVtYmVyKQoKIyBkb3dubG9hZEZpbGVzTGluaygpIGlzIGluY2x1ZGVkIGZyb20gX2luc2VydDJEQi5SCmtuaXRyOjpyYXdfaHRtbChkb3dubG9hZEZpbGVzTGluaygiLiIsIHppcE5hbWUsIHRleHRBTGluaykpCmBgYAoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgojIyBSZWZlcmVuY2VzCgpOb25lLgoKIyMgRXJyYXRhCgpbTGV0IHVzIGtub3ddKGh0dHBzOi8vZm9ybS5qb3Rmb3JtLmNvbS8yMTIxODcwNzI3ODQxNTcpe3RhcmdldD0iX2JsYW5rIn0uCgo=