高级软件测试人员一定要掌握的SQL之分组统计(GROUP BY/HAVING)

写了这么多天,终于把SELECT语句写完了。

分组统计查询—GROUP BY

格式:

SELECT {DISTINCT} *|具体的列 别名

FROM 表名称

{WHERE 条件(s)}

{GROUP BY 分组条件}

{ORDER BY 排序的字段 1,排序的字段 2,ASC|DESC}

(1)求出每个班级的人员数量

SELECT class,count(*)

FROM class

group by class;

(2)求出每个课程的平均分数

SELECT scno,avg(score)

FROM score

group by scno;

注意

错误写法:

SELECT scno,avg(score) FROM score;

第一种正确写法:

SELECT avg(score) FROM score;

第二种正确写法:

SELECT scno,avg(score) FROM score group by scno;

为什么会出现上面的情况,是因为分组函数的存在:

1.如果分组函数存在,要显示分组条件的字段,则需要加上分组条件

2.如果分组函数单独使用,可以不用加上分组条件

在没有分组条件存在的情况下,分组函数必须单独存在

如果有分组条件GROUP BY,显示结果集可以包含分组条件的字段,其它的字段不能出现

错误的写法:

SELECT scno,xuehao,avg(score) FROM score group by scno;

分组条件—HAVING

只出现在GROUP BY后面的语句

SELECT完整的格式:

SELECT {DISTINCT} *|具体的列 别名

FROM 表名称,{

SELECT {DISTINCT} *|具体的列 别名

FROM 表名称

{WHERE 条件(s)}

{GROUP BY 分组条件 HAVING 分组函数}

{ORDER BY 排序的字段1 ASC|DESC,排序的字段2 ASC|DESC}

} 别名……

{WHERE 条件(s){

SELECT {DISTINCT} *|具体的列 别名

FROM 表名称

{WHERE 条件(s)}

{GROUP BY 分组条件 HAVING 分组函数}

{ORDER BY 排序的字段1 ASC|DESC,排序的字段2 ASC|DESC}}

{GROUP BY 分组条件 HAVING 分组函数}

{ORDER BY 排序的字段1 ASC|DESC,排序的字段2 ASC|DESC}

(1)求出平均分数大于90的课程

错误写法:

SELECT scno FROM score WHERE avg(score) > 2000;

错误提示:1111 – Invalid use of group function

分组函数不允许出现在WHERE条件中,必须与group by 分组条件搭配使用

正确写法:

SELECT scno FROM score

GROUP BY scno HAVING avg(score) > 90;

(2)查询出班级人数大于5人的班级名称

SELECT class FROM class

GROUP BY class HAVING count(*) >5;


完整版的SQL系列:

软件测试人员不可不知的SQL语言之简单查询(SELECT)

SQL:INNER JOIN,LEFT JOIN,RIGHT JOIN,哪一个连接查询更合你意

高级软件测试人员一定要掌握的SQL语言之嵌套查询(MYSQL)

SQL语言练习数据:class表 AND course表 AND score表结构和数据

软件测试人员:你们需要用到SQL函数么?(sum,count,avg…)

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2017年11月4日
下一篇 2017年11月5日

相关推荐