美文网首页
分组的过滤方式

分组的过滤方式

作者: 夜阑w | 来源:发表于2019-04-02 22:23 被阅读0次

1、分组

  • 分组允许数据分为多个逻辑组,以便能对每个组进行聚集计算。
  • GROUP BY子句指示MYSQL分组数据,然后对每个组而不是整个结果集进行聚集。
  • GROUP BY必须出现在WHERE子句之后,ORDER BY子句之前。
  • GROUP BY子句中列出的每个列都必须是检索列或有效的表达式(但不能是聚集函数)。如果在SELECT中使用表达式,则必须在GROUP BY子句中指定相同的表达式。不能使用别名。
  • 如果分组列中具有NULL值,则NULL将作为一个分组返回。如果有多行NULL值,它们将分为一组。

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

+----+--------+---------+-------+
| 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、两种过滤方式的区别

  • WHERE过滤行,HAVING 过滤分组。
  • WHERE在数据分组前进行过滤,HAVING在数据分组后进行过滤。
  • 整体的语法格式:
select column,group_function(column)
from table
[where condition]
[group by group_by_expression]
[having group_condition]
[order by column]

相关文章

  • 分组的过滤方式

    1、分组 分组允许数据分为多个逻辑组,以便能对每个组进行聚集计算。 GROUP BY子句指示MYSQL分组数据,然...

  • 分组过滤的方式

    首先是利用利用聚合函数进行计算后再进行分组如COUNT()、AVE()、MIN()、MAX()等首先建立一个示例 ...

  • 数据库高级操作——分组过滤

    分组过滤 对分组结果进行过滤,必须使用HAVING子句,不能使用WHERE字句,WHERE字句是针对行的过滤。 单...

  • 《SQL必知必会》第 10 课 分组数据

    目标: 10.1 数据分组 10.2 创建分组 10.3 过滤分组 10.4 分组和排序 10.5 SELECT ...

  • 集合

    过滤、排序 聚合 分组 List转Map

  • js 多维度排序

    先按deviceState分组,然后每个分组中再按workProgress排序(null值过滤出来)

  • 数据库总结(一)

    having 分组之后过滤where 分组之前,会影响分组结果 内关联(innor jion)符合两个表的,出结果...

  • 4-19-4 Linux中的正则表达式 --- 分组

    1、分组:将需要过滤的内容规划成一个整体,简单理解就是把字符框选起来当作一个整体进行过滤处理。 2、分组可以进行嵌...

  • java基础-day31-数据库2.0

    7.7 分组查询 7.8 分组过滤查询 7.9 限定查询 7.10 基本查询总结 7.11 子查询 7.11.1 ...

  • MySQL分组过滤

    使用HAVING字句对分组结果进行过滤。 示例 有一个表格socre_sheet: 按科目subject对这个表格...

网友评论

      本文标题:分组的过滤方式

      本文链接:https://www.haomeiwen.com/subject/jmpibqtx.html