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

   

原文地址:https://www.cnblogs.com/123blog/p/10239439.html