分组的过滤方式

2019-04-02  本文已影响0人  夜阑w

1、分组

例如,对以下表进行分组操作:

+----+--------+---------+-------+
| id | name   | subject | score |
+----+--------+---------+-------+
|  1 | 张三   | 语文    |    80 |
|  2 | 李四   | 语文    |    90 |
|  3 | 王五   | 语文    |    60 |
|  4 | 王胖子 | 数学    |    59 |
|  5 | 张王五 | 英语    |  59.9 |
|  6 | 吴彦祖 | 英语    |  99.9 |
|  7 | 郭德纲 | 数学    |   100 |
|  8 | 郭敬明 | 数学    |    99 |
|  9 | 郭靖   | 英语    |    70 |
+----+--------+---------+-------+

统计各个科目的人数,可得:

mysql> SELECT subject, COUNT(*) AS count FROM score GROUP BY subject;
+---------+-------+
| subject | count |
+---------+-------+
| 语文    |     3 |
| 数学    |     3 |
| 英语    |     3 |
+---------+-------+
3 rows in set (0.01 sec)

2、使用WHERE进行过滤

对成绩超过60分的数据根据科目进行分组:

mysql> SELECT subject, COUNT(*) AS count FROM score WHERE score>=60 GROUP BY subject;
+---------+-------+
| subject | count |
+---------+-------+
| 语文    |     3 |
| 英语    |     2 |
| 数学    |     2 |
+---------+-------+
3 rows in set (0.00 sec)

3、使用HAVING进行过滤

对科目进行分组并过滤出平均成绩高于80分的科目:

mysql> SELECT subject, AVG(score) AS avg FROM score GROUP BY subject HAVING AVG(score)>=80;
+---------+------+
| subject | avg  |
+---------+------+
| 数学    |   86 |
+---------+------+
1 row in set (0.00 sec)

4、两种过滤方式的区别

select column,group_function(column)
from table
[where condition]
[group by group_by_expression]
[having group_condition]
[order by column]
上一篇 下一篇

猜你喜欢

热点阅读