函数分组统计
合计函数-COUNT
- 基本句型:
SELECT COUNT(*)|COUNT(列名) FROM tablename [WHERE where_definition];
(COUNT和后面的括号之间没有空格,COUNT(col)不会计入NULL) - 统计一个班共有多少学生?
SELECT COUNT(*) FROM students;
- 统计数学成绩大于90的学生有多少个?
SELECT COUNT(*) FROM students WHERE math > 90;
- 统计总分大于250的人数有多少?
SELECT COUNT(*) FROM students WHERE (chinese + english + math) > 90;
合计函数-SUM
- 注意:sum仅对数值起作用,否则会报错;对多列求和,“,”号不能少。(sum(A+B+C),A,B,C为三列,如果某行记录中A列值为NULL,则不统计这行。)
- 基本句型:
SELECT SUM(列名){,SUM(列名)...} FROM tablename [WHERE where_definition]
- 统计一个班级数学总成绩
SELECT SUM(math) FROM students;
- 统计一个班级语文、英语、数学各科的总成绩
SELECT SUM(chinese),SUM(english),SUM(math) FROM students;
- 统计一个班级语文、英语、数学的成绩总和
SELECT SUM(chinese + english + math) FROM students;
- 统计一个班级语文成绩平均分
SELECT SUM(chinese)/COUNT(*) FROM students;
合计函数-AVG
- AVG函数返回满足WHERE条件的一列的平均值
- 基本句型:
SELECT AVG(col) FROM table;
- 求一个班级数学平均分
SELECT AVG(math) FROM students;
(AVG不会计入NULL) - 求一个班级总分平均分
SELECT AVG(chinese + english + math) FROM students;
合计函数-MAX/MIN
- 基本句型:(MAX/MIN函数返回满足WHERE条件的一列的最大/最小值)
SELECT MAX(col)/MIN(col) FROM table [WHERE where_definition];
- 求班级最高分和最低分(数值范围在统计中特别有用)
SELECT MAX(chinese + english + math) FROM students;
SELECT MIN(chinese + english + math) FROM students;
分组语句-GROUP BY [HAVING]
- 使用GROUP BY子句对列进行分组
基本句型:
SELECT col1,col2... FROM table GROUP BY column;
注意:可以使用“`”(英文输入状态下ESC按键下的那个按键)把关键字包含起来,当作普通字符串对待。比如:order
可以作为表名存在,而不会被认为ORDER关键字。(但是不推荐)
- 对订单中商品归类后,显示每一类商品的总价
SELECT product,SUM(price) FROM t_order GROUP BY product;
- 使用having子句过滤(GROUP BY后不能使用WHERE )
查询购买了几类商品,并且每类总价大于100的商品
SELECT product,SUM(price) FROM t_order GROUP BY product HAVING SUM(price) > 100;
一些函数
数据库备份,恢复
备份
- 在MySQL的bin文件里有一个mysqldump.exe程序。(在dos命令模式下执行命令)
mysqldump -h localhost -u root -p mydb1>d:\\mydb1.sql
(两个“\”是因为“\m”是转义字符)
恢复
- 先创建数据库名,并选择数据库
方式一:SOURCE d:\\mydb1.sql;
(在mysql下执行该命令)
方式二:mysql -u root -p mydb1<d:\\mydb1.sql
(在dos命令行下执行该命令)