Mysql聚合函数、group by、having

文章介绍了SQL中的聚合函数,如AVG、SUM、MAX、MIN和COUNT,强调了COUNT(*)与COUNT(列名)的差异。同时,讨论了GROUPBY语句配合WITHROLLUP的使用,以及HAVING子句在过滤分组数据时的作用。文章还对比了WHERE与HAVING在处理数据筛选上的不同之处。
摘要由CSDN通过智能技术生成

1. 聚合函数

AVG()、SUM():适用于数值字段
MAX()、MIN()、COUNT():适用于所有类型字段,其中COUNT(字段)不会统计字段为NULL的行

关于COUNT的题目:

题目一:用count(*)、count(1)、count(列名)谁好
对于MyISAM引擎的表是没有区别。因为其内部有一计数器在维护着行数
对于Innodb引擎的表用count(*)、count(1)直接读行数,复杂度是O(n),因为innodb真的要去数一遍。但好于具体的count(列名)

题目二:能不能使用count(列名)替换count(*)
不要使用count(列名)来替代count(*),count(*)是SQL92定义的标准统计行数的语法,跟数据库无关,跟NULL和非NULL无关

2. group by

可以在GROUP BY中使用WITH ROLLUP,在所有查询出的分组记录之后增加一条记录,该记录计算查询出的所有记录的总和。当使用WITH ROLLUP时,不能使用ORDER BY子句进行结果排序

例如:

mysql> select product, sum(order_amount) from order group by product with rollup;
+---------+-------------------+
| product | sum(order_amount) |
+---------+-------------------+
| 1       |                20 |
| 2       |                30 |
| NULL    |                50 |
+---------+-------------------+
3 rows in set (0.00 sec)

mysql>

3. having

having可以对分组后的数据进行过滤操作

where和having的区别:如果需要通过连接从关联表中获取需要的数据,WHERE是先筛选后连接,而 HAVING是先连接后筛选

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值