MySQL之聚合与排序

来源:互联网 发布:mac firefly安装 编辑:程序博客网 时间:2024/06/06 15:42

对表进行聚合查询

聚合函数

函数 作用 COUNT 计算表中的记录(行数) SUM 计算表中数值列的数据合计值 AVG 计算表中数值列的数据平均值 MAX 求出表中任意列中数据的最大值 MIN 求出表中任意列中数据的最小值

计算表中全部数据行数时,可使用COUNT函数

--   用法SELECT COUNT(*)  FROM table_name;

计算NULL以外数据的行数

对于COUNT函数,会计算指定列的非NULL行数。
如果有一个表,只有一列,每一行都是NULL
使用COUNT(列名) 得到 0。
使用COUNT(*) 得到 表的行数。
COUNT函数的结果根据参数的不同而不同,COUNT(*)会得到包含NULL的数据行数,而COUNT(<列名>)会得到NULL之外的数据行数。

计算合计值(SUM)

使用SUM可以计算出指定列(可以包含NULL)的指定行的累加值。
聚合函数会将NULL排除在外,但COUNT(*)不会排除NULL。

所有聚集函数

MAX,MIN,SUM,AVG,COUNT
MAX/MIN函数几乎使用所有数据类型的列。SUM/AVG函数只适用于数值类型的列。

使用聚合函数删除重复值(DISTINCT)

所以聚集函数都可以使用DISTINCT。
计算去除重复数据后的数据行数

SELECT COUNT(DISTINCT 列名)   FROM 表名;   

先计算数据行数再删除重复数据

SELECT DISTINCT COUNT(列名)  FROM 表名:############################ 并没有什么用

计算值得的种类,可以在COUNT函数的参数中使用DISTINCT。

对表进行分组

使用GROUP BY子句,对表进行分组。

SELECT 列名  FROM 表名  GROUP BY 列名;

在GROUP BY子句中指定的列称为聚合键或者分组列

聚合键中包含NULL的情况

对某一列作为聚合键进行切分时,NULL也算做一组。
聚合键中包含NULL时,在结果中会以“不确定”行(空行)来表现。

使用WHERE子句时GROUP BY的执行结果

SELECT 列名1,列名2  FROM 表名  WHERE  GROUP BY 列名1,列名2;

首先根据WHERE子句指定条件进行过滤,然后再进行聚合处理。
执行顺序:FROM->WHERE->GROUP BY ->SELECT

与聚合函数和GROUP BY相关错误

1.使用GROUP BY子句时,SELECT子句中不能出现聚合键之外的列名。
GROUP BY指定列名,找到后,可能这个列名有多个相同的,被分为一组,但之外的那一列可能不同,这怎么表示?没法表示,,所以错误。
2.在GROUP BY子句中不能使用SELECT子句中定义的别名。
执行顺序问题哦。
3.GROUP BY子句结果的显示是无序的。
4.只有SELECT子句和HAVING子句(以及ORDER BY子句)中可以用聚合函数。

为聚合结果指定条件

使用HAVING子句。

-- 这是错误的!!!!!!!SELECT shohin_bunrui,COUNT(*)  FROM Shoin  GROUP BY shohin_bunrui  HAVING shohin_mei = '狮子';

shohin_mei不在GROUP BY子句中,把一次聚合后的结果作为HAVING子句起始点的话更容易理解。可以把这种情况想象为使用GROUP BY子句时的SELECT子句。聚合后得到的表不存在shohin_mei这个列。

WHERE子句 = 指定行所对应的条件
HAVING子句 = 指定组所对应的条件

聚合键所对应的条件应该写在WHERE子句中。

ORDER BY子句通常写在SELECT语句末尾。

0 0