• SQL笔记四:order by 和group by


    1.order by 排序

    使用场景:对查询的数据结果做一个排序

    语法:select 字段A,字段B,...,字段N from...order by 字段A asc(desc),字段Basc(desc),...,字段Nasc(desc)

    注意事项:1.需要制定排序规则 asc升序,desc降序,默认为升序;2.多个排序字段的用法是,先按第一个排序字段排序,如果出现数据相同时按照第二个字段排序。

    实例:查询所有学生的数学成绩,显示学生姓名name, 分数, 由高到低

    分析过程:

    1.查询涉及到的表:student,grade

    2.查询字段信息:student.name,grade.score

    3.关联条件:student.id=grade.id

    4.过滤条件:grade.kemu='数学' order by score desc

    所以最终得到的sql如下:

    select

      a.name,b.score

    from

      student a,grade b

    where

      a.id=b.id

    and

      kemu='数学'

    order by

       score desc

    2.group by 分组查询

    使用场景:根据什么来分组,一般是根据一个或者多个字段来分组,必须有聚合函数(即对一组执行计算并返回单一值的函数)来配合才能使用。

    语法:select 字段A,字段B,...,字段N,聚合函数 from...group by 字段A,字段B,...,字段N

    注意事项:1.查询信息里必须有聚合函数,常见的聚合函数有:sum()、count()、avg()、min()、max()等

    实例1:统计学生表男女生分别多少人

    分析过程:

    1.查询涉及到的表:student

    2.查询字段信息:按男女分组来看多少人,则必须要显示出:sex和count(*)

    3.关联条件:只需查一个表,无关联

    4.过滤条件:group by sex

    所以最终得到的sql如下:

    select

      sex,count(*)

    from

      student

    group by

      sex

    实例2:统计每个年级的学生人数(显示年级名称,年级id)

    分析过程:

    1.查询涉及到的表:student|,class,grade

    2.查询字段信息:grade.id,grade.name,count(*)

    3.关联条件:student.class_id=class.id and class.grade_id=grade.id

    4.过滤条件:group by grade.id

    所以最终得到的sql如下:

    select

      grade.id,grade.name,count(*)

    from

      student|,class,grade

    where

      student.class_id=class.id and class.grade_id=grade.id

    group by

      grade_id

    3.一起使用。

    使用场景:统计某个或某些个类别分组下的排序

    语法:select 字段A,字段B,...,字段N,聚合函数 from...group by 字段A,字段B,...,字段N,order by 字段A asc(desc),字段Basc(desc),...,字段Nasc(desc)

    注意事项:1.GROUP BY 和 ORDER BY一起使用时,ORDER BY要在GROUP BY的后面

    实例1:统计每个学生的总成绩并排序(由于学生可能有重复名字),显示字段:学生id,姓名,总成绩

    分析过程:

    1.查询涉及到的表:student a,grade b

       还有一个总成绩的学生表,这里需要查询得到:select b.id,sum(b.score) from grade b group by id

    2.查询字段信息:a.id,a.name,sum(b.score)

    3.关联条件:a.id=c.id

    4.过滤条件:order by sum(b.score) desc

    所以最终得到的sql如下:

    select

      a.id,a.name,c.sum(b.score)

    from

      student a,grade b,(select b.id,sum(b.score) from grade b group by id) c

    where

      a.id=c.id

    order by

      c.sum(b.score) desc

       

  • 相关阅读:
    计算机英语
    NSQ学习记录
    Java学习记录-注解
    VS插件开发

    双链表
    顺序表
    顺序队列
    顺序栈

  • 原文地址:https://www.cnblogs.com/123blog/p/10239439.html
Copyright © 2020-2023  润新知