CREATE TABLE t_student( id INT PRIMARY KEY AUTO_INCREMENT,studentName VARCHAR(20),grade INT )DEFAULT CHARSET=utf8; INSERT INTO t_student(studentName,grade)VALUES ('张三',90); INSERT INTO t_student(studentName,grade)VALUES ('李四',70); INSERT INTO t_student(studentName,grade)VALUES ('王麻',grade)VALUES ('赵二',75); INSERT INTO t_student(studentName,grade)VALUES ('柳五',86); INSERT INTO t_student(studentName,grade)VALUES ('陶渊明',45); INSERT INTO t_student(studentName,grade)VALUES ('何元庆',60); INSERT INTO t_student(studentName,grade)VALUES ('何元',grade)VALUES ('何df',100); ALTER TABLE t_student ADD className VARCHAR(20); UPDATE t_student SET className='GT01' WHERE id>5; UPDATE t_student SET className='GT02' WHERE id<=5 SELECT * FROM t_student -- 统计所有学生的总分 SELECT SUM(grade) total FROM t_student; -- 统计学生总数 SELECT COUNT(*) FROM t_student; -- 统计参考人数,如果指定列位null,不参与统计 SELECT COUNT(grade) FROM t_student; -- 去掉指定列重复的记录 SELECT COUNT(disTINCT grade) FROM t_student; -- 统计参考人数(去除null列)平均分 SELECT AVG(grade) FROM t_student; -- 统计所有学生平均分,没参加考试的学生为0分 SELECT SUM(grade)/COUNT(*) FROM t_student; -- 统计最高分和最低分 SELECT MAX(grade),MIN(grade) FROM t_student; -- where 后面不能跟聚合函数 SELECT studentName,grade FROM t_student WHERE grade =(SELECT MAX(grade) FROM t_student) -- 将className相同的记录分成一组,然后再进行统计 SELECT className,COUNT(*) FROM t_student GROUP BY className -- 统计所有班级及格的人数 SELECT className,COUNT(grade) FROM t_student WHERE grade>=60 GROUP BY className -- 在有分组的sql中,投影的列就会有限制。要求select 中的列必须满足以下两个条件之一,否则就是无效的投影。 -- 1、使用了聚合函数的列 2、该列在GROUP BY字句中 -- HAVING 和WHERE区别:二者都是过滤条件,WHERE运行在分组前,因此不能执行任何聚合函数。HAVING 是运行在分组后,只能用做聚合函数的过滤。 -- 统计班级平均分在70分以上的班级,HAVING 过滤分组之后的数据,只能加在group by后面 SELECT className,AVG(grade) FROM t_student GROUP BY className HAVING AVG(grade)>=70 -- sql 的执行顺序: -- 1、执行from -- 2、执行where条件过滤 -- 3、group by 分组 -- 4、执行select投影列 -- 5、having条件过滤 -- 6、执行order by排序
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。