zoukankan      html  css  js  c++  java
  • 分组聚集计算与分组过滤


    分组

    SQL 可以将检索到的元组按照某一条件进行分类,具有相同条件值得元组划到一个组或一个集合中,同时处理多个组或集合的聚集运算。

    分组的基本语法

    SELECT 列名|expr|agfunc(列名) [[,列名|expr|agfunc(列名)]...]
    FROM 表名1 [,表名2...]
    [WHERE 检索条件]
    [GROUP BY 分组条件];
    

    分组条件可以是列名1,列名2...


    示例1:查询每一个学生的平均成绩

    表结构

    SELECT * FROM sc
    +----------------+------------------+-----------------+
    | name           | course           | score           |
    +----------------+------------------+-----------------+
    | Tom            | English          |              90 |
    | Tom            | Math             |              60 |
    | David          | english          |             100 |
    | David          | Math             |              80 |
    +----------------+------------------+-----------------+
    
    SELECT name , AVG(score)
    FROM sc
    GROUP BY name
    +----------------+----------------------+
    | name           | AVG(score)           |
    +----------------+----------------------+
    | David          | 90.0000              |
    | Tom            | 75.0000              |
    +----------------+----------------------+
    

    示例2:查询每一门课程的平均

    SELECT course, AVG(score)
    FROM sc
    GROUP BY course
    +------------------+----------------------+
    | course           | AVG(score)           |
    +------------------+----------------------+
    | English          | 95.0000              |
    | Math             | 70.0000              |
    +------------------+----------------------+
    

    聚集函数是不允许用于WHERE子句中的:WHERE子句是对每一元组进行条件过滤,而不是对集合进行条件过滤

    分组过滤

    若要对集合(分组)进行条件过滤,即满足条件的集合/分组留下,不满足条件的集合剔除。

    HAVING子句,又称分组过滤子句。需要有GROUP BY子句的支持。换句话说,没有GROUP BY子句,就没有Having子句。

    语法

    SELECT 列名|expr|agfunc(列名) [[,列名|expr|agfunc(列名)]...]
    FROM 表名1 [,表名2...]
    [WHERE 检索条件]
    [GROUP BY 分组条件 [HAVING 分组过滤条件]];
    

    示例:求不及格课程超过1门的同学的学号
    表结构

    SELECT * FROM SC
    +----------------+------------------+-----------------+
    | name           | course           | score           |
    +----------------+------------------+-----------------+
    | Tom            | English          |              59 |
    | Tom            | Math             |              59 |
    | David          | english          |             100 |
    | David          | Math             |              80 |
    +----------------+------------------+-----------------+
    

    查询

    SELECT name FROM sc
    WHERE score<60
    GROUP BY name HAVING COUNT(*) >= 2
    +----------------+
    | name           |
    +----------------+
    | Tom            |
    +----------------+
    
  • 相关阅读:
    video 属性和事件用法大全
    微信小程序 组件通信相关知识整理
    JavaScript实现登录窗口的拖拽
    JS 各种宽高
    CSS3 Animation
    CSS3 Transition
    CSS3 Transform
    vue 回到页面顶部
    element-ui 动态换肤
    Chrome浏览器下自动填充的输入框背景
  • 原文地址:https://www.cnblogs.com/velscode/p/10557115.html
Copyright © 2011-2022 走看看