一天一个关于测试知识点,5分钟内讲解你最关心的软件测试问题,今天就接着来谈谈关于软件测试中的“MySQL数据库统计函数使用详解”。
统计函数
统计函数是mysql函数中最重要的函数之一,是我们工作中使用最多、频率最高函数,它能有效地提高我们的工作效率,能快速地从复杂、繁琐的数据中提取我们需要的数据。
统计类函数很多最常用的统计函数有:count(*),count(ve),count(distinct ve),sum(ve),sum(distinct ve),avg(ve),avg(distinct ve),max(ve),min(ve)等等,ve在这里统一指列名。
统计函数使用注意事项:
1.统计函数使用时select后边不能随意写其他列名。
2.统计函数不能直接放到where后边作为过滤条件来用。
3.统计函数通常情况下,只会返回一个值。
一、统计函数具体介绍:
1).count(*):
统计查询结果集返回的行数。
查询班里有多少学生?
select * from student;
select count(*) from student;
统计年龄大于大乔学生有多少人?
select * from student where sage>(select sage from student where sname="大乔");
select count(*) from student where sage>(select sage from student where sname="大乔");
2).count(ve):
统计查询结果集返回的某一列非空值的个数。
查询有多少员工?
select * from emp;
select count(*) from emp;
select count(empno) from emp;
统计价格大于3000的商品有多少种?
select * from ecs_goods where shop_price>3000;
select count(*) from ecs_goods where shop_price>3000;
select count(id) from ecs_goods where shop_price>3000;
3).count(distinct ve):
统计查询结果集返回的某一列非空且不同值的个数。
查询员工一共来自多少个部门。
select count(DISTINCT deptno) from emp;
4).sum(ve)
统计查询结果集返回的某一列非空值的和。
查询所有员工每月工资总和是多少。
select sum(sal) from emp;
select * from emp;
查询销售部员工工资总和;
select * from emp,dept where emp.deptno=dept.deptno and dname="sales";
select sum(sal) from emp,dept where emp.deptno=dept.deptno and dname="sales";
5).sum(DISTINCT ve)
统计查询结果集返回的某一列非空,且不同值的和。
6).avg(ve)
统计查询结果集返回的某一列非空值的平均值。
查询销售部员工的工人数,总工资,平均工资。
select count(*),sum(sal) ,sum(sal)/count(*),avg(sal) from emp,dept where emp.deptno=dept.deptno and dname="sales";
求参加了考试的学生的平均成绩。
select avg(score) from sc;
求张三同学的平均成绩、参加考试门数,总成绩。
select avg(score),count(cno),sum(score) from student s,sc where s.sno=sc.sno and sname="张三";
7)avg(DISTINCT ve)
统计查询结果集返回的某一列非空且不同值的平均值。
8)max(ve)
统计查询结果集返回的某一列的最大值
9)min(ve)
统计查询结果集返回的某一列的最小值
求商品售价最高、最低商品是什么?
SELECT
g.*
FROM
ecs_goods g,
( SELECT max( shop_price ) mas, min( shop_price ) mis FROM ecs_goods ) t
WHERE
g.shop_price = t.mas
OR g.shop_price = t.mis;
二、普通函数和统计函数的区别。
1.统计函数一般只能放到select后边,而普通函数既可以放到select后边,也可直接放到where后边。
2.统计函数放到select后边时,不能随意写其他列名,而普通函数放到select后边,还可以写其他的列名。
3.统计函数在查询结果集没有分组的情况下,一般一个函数只会返回一个结果。而普通函数对表的每一行都会返回一个结果。
三、以统计函数和普通函数区别实例。
1)商品类型为数码相机的商品有多少个,它们的总库存是多少;
select count(*),sum(goods_number) from ecs_goods g,ecs_goods_type t
where g.goods_type=t.cat_id and cat_name="数码相机";
2)销售部有多少个员工;
select count(*) from emp ,dept where emp.deptno=dept.deptno and dname="sales";
3)统计所有手机的市场平均价格是多少;
select avg(market_price) from ecs_goods g,ecs_goods_type t
where g.goods_type=t.cat_id and cat_name like "%手机";
4)最近一次的订单日期是哪一天;
select max(from_unixtime(add_time)) from ecs_order_info;
5)求市场价格大于销售价格的商品有哪些;
select * from ecs_goods where market_price>shop_price;
6)请求出张三同学的最高分,最低分,平均分,总分,以及所学课程数;
select max(score),min(score),avg(score),sum(score),count(cno) from student s,sc where s.sno=sc.sno and sname="张三";
7)找出入职最早的员工;
select * from emp where HIREDATE=
(select min(HIREDATE) from emp);
8)找出出生年月最小的学生,及出生日期;
select * from student where birth_date=(select max(birth_date) from student);
9)找出单科成绩最高的学生,输出其成绩;
select s.sno,sname,cname,score from student s,sc,course cc where s.sno=sc.sno and sc.cno=cc.cno and score=
(select max(score) from sc);
10)输出学生表所有姓氏;
select left(sname,1),sname from student;
11)输出所有学生的出生的月份、出生的年份;
select sname,month(birth_date),year(birth_date),day(birth_date) from student;
12)每个月按照22个工作日算的话,请计算出日薪资,只保留整数位;
select TRUNCATE(sal/22,0) from emp
13)找出大于女生平均年龄的所有学生;
select * from student where sage>(select avg(sage) from student where ssex="女");
14)找出2008出生的学生有哪些(使用函)
select * from student where left(birth_date,4)=2008;
select * from student where year(birth_date)='2008';