zoukankan      html  css  js  c++  java
  • 数据库的统计汇总分组合并

    对表数据进行检索时,经常需要对结果进行汇总或计算,例如,在学生成绩数据库中求某门课程的总成绩,统计各分数段的人数等。

    1.统计函数

    统计函数用于计算表中的数据,返回单个计算结果

    SUM和AVG函数:分别用于求表达式中所有值项的总和与平均值

    --求选修100012课程的学生的平均成绩。
    select
    avg(result_number)
    from
    school_result
    where result_course='100012';

    MAX和MIN函数:用于求表达式中所有值得最大值和最小值

    --求选修100012课程的学生的最高分和最低分。
    select
    max(result_number)
    from
    school_result
    where result_course='100012';

    COUNT函数:用于统计组中满足条件的行数或总行数

    --求学生的总人数。
    select
    count(*)
    from
    school_students
    ;
    --统计数据库技术及应用课程成绩在85分以上的人数。
     select
    count(*)
    from
    school_result
    where
    RESULT_NUMBER>=85
    and result_course=(
                          select course_id
                          from
                          SCHOOL_COURSE
                          where
                          course_name='数据库技术及应用'
                       )
                       ;

    2.分组

    GROUP BY子句用于对表或视图中的数据按字段分组,格式为:

    [ GROUP BY [ ALL ] group_by_expression [,…n]

    --将数据库成绩表中各专业编号输出。
    select
    result_course
    from
    school_result
    group by result_course;

    3.分组筛选

    使用group by子句和统计函数对数据进行分组后,还可以使用having子句对分组数据进行进一步的筛选

    having子句的查询条件与where子句类似,不同的是having子句可以使用统计函数,而where子句不可以使用统计函数

    --查找数据库中平均成绩在85分以上的学生的学号和平均成绩。
     select
    avg(result_number),
    result_stu
    from
    school_result
    group by result_stu
    having avg(result_number)>=65;

    在select语句中,当where,group by与having子句都被使用时,要注意他们的作用和执行顺序。where用于筛选由from指定的数据对象;group by用于对where的结果进行分组;having则是对group by 子句以后的分组数据进行过滤。

    --查找选修课程超过2门且成绩都在80分以上的学生的学号。
    select
    result_stu
    from
    school_result
    where RESULT_NUMBER>=80
    group by result_stu
    having count(result_stu)>=2;

    4.排序

    在应用中经常要对查询的结果排序输出,例如,学生成绩由高到底排序

    升序asc

    倒序 desc

    默认的是asc

    --将20163001专业的学生按出生时间先后排序。
    select
    * 
    from
    SCHOOL_STUDENTS
    where
    stu_class='20163001'
    order by STU_BIRTHDAY asc;

    5.合并

    使用union子句可以将两个或多个select查询结果合并成一个结果集

    其中:all表示对所有值进行运算,distinct表示去除重复值,默认是all

    --把课程和班级合并查询
     select * from school_class
    UNION all
    select * from school_course;

    使用union组合两个查询的结果集的基本规则如下:

    1.所有查询中的列数和列的顺序必须相同

    2.数据类型必须兼容

  • 相关阅读:
    C++编程练习(3)----“实现简单的栈的顺序存储结构“
    C++编程练习(2)----“实现简单的线性表的链式存储结构“
    C++编程练习(1)----“实现简单的线性表的顺序存储结构“
    Django--登录实例
    Django--model模型绑定_数据库操作
    Django--初始化
    web框架--MVC、MTV
    CSS--箭头
    CSS--抽屉(dig.chouti.com)页面
    jQuery--加一行减一行
  • 原文地址:https://www.cnblogs.com/zhangpichun-7/p/13166478.html
Copyright © 2011-2022 走看看