MySQL | GROUP BY
Start your free 7-days trial now!
MySQL's GROUP BY
clause allows you to group identical entries in a column into groups. GROUP BY
will return one record for each group.
Syntax
SELECT column_name(s)FROM table_nameWHERE conditonGROUP BY column_nameORDER BY column_name;
Examples
Consider the following table about whether students have a drivers license:
student_id | full_name | age | has_license |
---|---|---|---|
1 | Sky Towner | 17 | 0 |
2 | Ben Davis | 19 | 1 |
3 | Travis Apple | 18 | 0 |
4 | Arthur David | 16 | 0 |
5 | Benjamin Town | 17 | 1 |
The above sample table can be created using the code here.
Use with aggregate functions
We can use GROUP BY
with aggregate methods such as COUNT
, MAX
, MIN
, SUM
, AVG
to effectively return information about our table.
To return the number of students for each age
:
SELECT age, COUNT(*) FROM drivers_licenseGROUP BY age;
+------+----------+| age | COUNT(*) |+------+----------+| 17 | 2 || 19 | 1 || 18 | 1 || 16 | 1 |+------+----------+
To check the average age of students with and without a license:
SELECT has_license, AVG(age) FROM drivers_licenseGROUP BY has_license;
+-------------+----------+| has_license | AVG(age) |+-------------+----------+| 0 | 17.0000 || 1 | 18.0000 |+-------------+----------+
The average age for students without a license is 17
and students with a license is 18
.
To check for minimum and maximum age of students with and without a license:
SELECT has_license, MIN(age), MAX(age) FROM drivers_licenseGROUP BY has_license;
+-------------+----------+----------+| has_license | MIN(age) | MAX(age) |+-------------+----------+----------+| 0 | 16 | 18 || 1 | 17 | 19 |+-------------+----------+----------+