SQL中where、order by、group by、having、limit如何组合应用

以students表为例
SQL中where、order by、group by、having、limit如何组合应用_第1张图片
查询除了2班以外人数大于2的的班级中平均年龄最大的班级以及对应的平均年龄。
首先将题目拆分,
1.查询各班级的人数,平均年龄
在这里插入图片描述
SQL中where、order by、group by、having、limit如何组合应用_第2张图片

2.在1的基础上排除2班
在这里插入图片描述
SQL中where、order by、group by、having、limit如何组合应用_第3张图片

3.在2的基础上剔除人数不大于2的班级,由于where子句不能使用聚合函数,我们用having来实现
在这里插入图片描述
在这里插入图片描述

4.按照题目要求,在3的基础上将avg(age)降序,取第一条记录即可。(用子查询来规避最大平均年龄相同的情况在这里不说明,有机会再聊。)
在这里插入图片描述
在这里插入图片描述

在这里,我拾人牙慧的总结一下:
在一个完整的select语句中

  1. from是对表各项数据的一个整合,后面紧跟着表或者表级子查询;
  2. where是对表数据的一个筛选,是紧贴着from table的,另外where子句中不能使用聚合函数;
  3. group by ··· having 是对表数据的一个分组筛选。一般的聚合函数都是搭配group by 来使用的,故having后面是可以用聚合函数来作为筛选条件的;
  4. order by用来对数据进行排序,一般来讲,只会在数据整理完毕后才进行排序,所以order by 放在where、group by ··· having 这些整理数据的子句后面;
  5. limit分页显示一般都是在数据定型后使用,所以放在最后面。
    综上,我们书写顺序是这样的
    select ... from ... where ... group by ... having ...order by ... limit (n-1)*m, m;

个人浅见,如有错漏,敬请指教!

你可能感兴趣的:(SQL,mysql,数据分析,数据库,sql)