一、统计函数
aql中的统计函数有count(*/列名/distinct 列名),sum(); avg();max();min();后面四种都是对数值列的统计,里面参数有默认的 all 及 去重复统计distinct
它们可以放在 select 和from之间;或者having 之后。
having是用来专门解决 统计函数不能放在where之后的,用于统计函数的结果的过滤。
不能放在where之后。
二、分组
分组用group by 列名1,列名2,先对列1分组,在对列2 分组。
放在where之后,having语句之前。
select 分组列1,group_concat(非分组的列名2) from t_name where 条件 group by 分组列1。
这样可以输出分组,及每个组中包含的列2中的所有值,他们放在一个数据中
三、语句执行顺序
语句的执行顺序是:
from (联接), where 条件,group by 分组,select 投影列,having 统计结果过滤,order by 排序,limit m,n 分页。aql语句的时候按照这样的顺序写。
列子:
CREATE TABLE t_e(
id INT ,
NAME CHAR
);
SELECT COUNT(NAME) FROM t_e;
DELETE FROM t_student WHERE s_classid=1;-- delete 与 from之间不能加列名,否则报错,只能整行删除
-- 要删除单列的值用update 表名 set列名= where条件
SELECT studentid,classid,grade FROM enrollment WHERE grade<60 GROUP BY classid HAVING AVG(grade)<70 ORDER BY grade;
CREATE TABLE t_student(
s_id INT PRIMARY KEY AUTO_INCREMENT,
s_name VARCHAR(50) NOT NULL,
s_score INT,
s_sex CHAR(2) NOT NULL,
s_classid INT NOT NULL
)CHARSET='utf8';
INSERT INTO t_student VALUE
(NULL,'张曾',87,'男',1),
(NULL,'张曾',87,'男',1),
(NULL,'张2',76,'男',2),
(NULL,'张4',87,'男',3),
(NULL,'张3',34,'男',1),
(NULL,'张曾',87,'男',4),
(NULL,'张曾',87,'男',3),
(NULL,'张曾',87,'男',3),
(NULL,'张曾',98,'女',2),
(NULL,'张曾',87,'男',2),
(NULL,'张曾',96,'女',1);
SELECT MAX(s_score),s_classid FROM t_student GROUP BY s_classid ORDER BY MAX(s_score) DESC;
SELECT MAX(s_score),s_sex,s_classid FROM t_student WHERE s_sex='男' GROUP BY s_classid;
SELECT MAX(s_score),s_sex,s_classid FROM t_student WHERE s_sex='男' AND s_classid=2;
SELECT AVG(s_score),s_classid,s_sex FROM t_student WHERE s_classid=1 AND s_sex='女';
SELECT COUNT(*)AS 人数,s_classid FROM t_student WHERE s_classid=1;
SELECT COUNT(*)AS 人数,s_classid FROM t_student GROUP BY s_classid;
SELECT * FROM t_student;