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            |
    +----------------+
    
  • 相关阅读:
    数据结构之 内部排序---交叉排序(没啥特别的!!!)
    数据结构之 图论---基于邻接矩阵的广度优先搜索遍历(输出bfs遍历序列)
    数据结构之 图论---图的深度遍历( 输出dfs的先后遍历序列 )
    数据结构之 排序---折半插入排序(时间复杂度 O(nlog2 n) )
    HDU 1022 之 Train Problem I
    Bestcoder round 18---A题(素数筛+素数打表+找三个素数其和==n)
    Bestcoder round 18----B题(一元三次方程确定区间的最大值(包含极值比较))
    操作字典
    在线压缩图片
    JSON转C#实体类
  • 原文地址:https://www.cnblogs.com/velscode/p/10557115.html
Copyright © 2011-2022 走看看