Dividing a Summary into Subgroups
Problem
You want to calculate a summary for each subgroup of a set of rows, not an overall summary value.
Solution
Use a GROUP
BY clause to arrange rows into
groups.
Discussion
The summary statements shown so far calculate summary values
over all rows in the result set. For example, the following statement
determines the number of records in the mail table, and thus the total number of
mail messages that have been sent:
mysql>SELECT COUNT(*) FROM mail;
+----------+
| COUNT(*) |
+----------+
| 16 |
+----------+Sometimes it’s desirable to break a set of rows into subgroups
and summarize each group. Do this by using aggregate functions in
conjunction with a GROUP
BY clause. To determine the number of
messages per sender, group the rows by sender name, count how many
times each name occurs, and display the names with the counts:
mysql>SELECT srcuser, COUNT(*) FROM mail->GROUP BY srcuser;+---------+----------+ | srcuser | COUNT(*) | +---------+----------+ | barb | 3 | | gene | 6 | | phil | 5 | | tricia | 2 | +---------+----------+
That query summarizes the same column that is used for grouping
(srcuser), but that’s not always
necessary. Suppose that you want a quick characterization of the
mail table, showing for each sender
listed in it the total amount of traffic sent (in bytes) and the
average number of bytes per message. In this case, you still use the
srcuser column to place the rows in
groups, but the summary functions operate on the size values:
mysql> ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access