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

分组的过滤方式

作者: 夜阑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]
    

    相关文章

      网友评论

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

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