Mysql聚合函数、group by、having

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是先连接后筛选

猜你喜欢

转载自blog.csdn.net/yy8623977/article/details/126489745