group by以及order by

1、group by

根据指定的列名(即规则)对数据进行分组,将一个“数据集” 划分成若干个“小区域”,然后针对若干个“小区域”进行数据处理。

常用的聚合函数:count() , sum() , avg() , max() , min();

HAVING 操作的对象是组,那么其使用的要素是有一定限制的,能够使用的要素有 3 种: 常数 、 聚合函数 和 聚合键 ,聚合键也就是 GROUP BY 子句中指定的列名。

select 字段 from 表名 where 条件 group by 字段 having 过滤条件。

与where的区别:

(注意:where后的条件表达式里不允许使用聚合函数,而having可以)

WHERE 先过滤出行,然后 GROUP BY 对行进行分组,HAVING 再对组进行过滤,筛选出我们需要的数据,如下:
在这里插入图片描述
group by一些注意点,使用聚集函数。点击查看

当where和having关键字同时使用时,尽量在where中书写筛选数据条件理由如下:

  1. 语义更清晰,WHERE 子句和 HAVING 子句的作用是不同的;前面已经说过,HAVING 子句是用来指定“组”的条件的,而“行”所对应的条件应该写在 WHERE 子句中,这样一来,写出来的 SQL 语句不但可以分清两者各自的功能,而且理解起来也更容易

  2. 执行速度更快,使用 COUNT 等函数对表中数据进行聚合操作时,DBMS 内部进行排序处理,而排序处理会大大增加机器的负担,从而降低处理速度;因此,尽可能减少排序的行数,可以提高处理速度

  3. 通过 WHERE 子句指定条件时,由于排序之前就对数据进行了过滤,那么就减少了聚合操作时的需要排序的记录数量;而 HAVING 子句是在排序之后才对数据进行分组的,与在 WHERE 子句中指定条件比起来,需要排序的数量就会多得多

  4. 另外,索引是 WHERE 根据速度优势的另一个有利支持,在 WHERE 子句指定条件所对应的列上创建索引,可以大大提高 WHERE 子句的处理速度

注意:

默认情况下,如果只有group by col,那么结果将会按照col进行升序排序,也就是说,mysql会导致默认的排序,这个对性能是有影响的,注意!

如果确定不需要排序,那么可以加上group by col order by null,这样就不会导致排序。但有列外情况:假如col字段上有索引,那么即使加上order by null,其查出来的结果仍然是按照col排序的,相当于使用了索引覆盖,注意!

点击此处!
另外一篇!

select 字段 fun_name from 表名 [where 条件] [group by field1,field2...] [with rollup] [having 条件];
 
eg:
 
1.fun_name 表示要做的聚合操作,也就是说聚合函数,常用的有 : sum(求和)count(*)(记录数)max(最大值)min(最小值)2.group by关键字 表示要进行分类聚合的字段。比如要按照部门分类统计员工数量,部门就应该写在group by 后面。
3.with rollup 是可选语法,表明是否对分类聚合后的结果进行再汇总
4.having 关键字表示对分类后的结果再进行条件过滤。

2、order by

//关键字  desc(降序) asc(升序),放在列名后面
//descend      ascend
select * from 表名 order by 列名1 desc, 列名2 asc ;
默认是升序
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值