where,group by, having order by

使用说明:

select 列x[,聚合函数] 
from 表名 
where 筛选条件 
group by 列x(是select那里的列x) 
having 过滤条件 
order by 列名(或聚合函数,需要时select那里出现的) [desc | asc]

执行顺序:

1、 where返回符合条件的结果集
2、 group by返回分类结果集
3、 select返回选择后的结果集
4、having返回符合条件的结果集
5、 order by按照某种方式对某列进行排序

至于为什么有了where只有还要有having?
不仅是因为having的执行时间不同,更重要的是where后面不能跟聚合函数,我们待会再下面的例子里来细说。

举个栗子:

select name, sum(grade)
from people
where sex='男'
group by name
having sum(grade)>100
order by sum(grade) desc

首先,将people表中所有男性选择出来;
然后将所有男性的元组按照姓名分好组;
分好组后将name和sum(grade)计算好并投影出来;
having必然是需要的,因为这个时候才知道sum(grade)的值,这时having就将上面那个投影出来的结果集中的sum(grade)>100的元组全部挑选出来;
最后order by按照总成绩(即sum(grade))的大小由高到低将name和sum(grade)作为结果最终返回。

参考资料:
https://www.cnblogs.com/toward-the-sun/p/4041449.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值