mySQL中统计男女分别有多少人 mysql查询女生人数_mysql count null


一、汇总函数

汇总函数也就是聚合函数,是将多行结果汇总为一行输出,下图是常见的汇总函数:


mySQL中统计男女分别有多少人 mysql查询女生人数_mysql count null_02


接着我们对上面的函数一个个进行学习,看看他们具体的使用是怎么样的


  • count函数:
SELECT


mySQL中统计男女分别有多少人 mysql查询女生人数_mysql count null_03


输出结果为什么是4个呢?这是因为教师号0003的教师名称就是Null,不是真正意义上的空值,他算一个数据,会被计数;教师号0004的教师名称是空格,也是一个字符串,只是肉眼看不到,它也算是一个数据;教师号0005的教师名称是(Null),它才是真正意义上的空值,才是真正代表什么也没有。因此5个数据中只有最后一个教师姓名的数据是为空,因此查询结果是4个。

下面再看一个例子:


SELECT


mySQL中统计男女分别有多少人 mysql查询女生人数_mysql count null_04


*代表是全部,因此count函数计数的是全部行,包括空值的行,最后的查询结果为5。

注意:除了COUNT(*)例外,其余所有的汇总函数会将NULL数据排除之后再进行计算。

  • sum函数:(只能对数值类型的列进行计算)
SELECT


mySQL中统计男女分别有多少人 mysql查询女生人数_mysql count null_05


  • avg函数:(只能对数值类型的列进行计算)
SELECT


mySQL中统计男女分别有多少人 mysql查询女生人数_.net函数查询_06


  • max函数和min函数(几乎适用于所有数据类型的列):
SELECT


mySQL中统计男女分别有多少人 mysql查询女生人数_mysql count null_07


需要注意的是:

  • 将MAX()函数应用于文本数据时,会返回该列按照升序排列的最后一行
  • 将MIN()函数应用于文本数据时,会返回该列按照升序排列的第一行。

比如:MAX(姓名),MIN(姓名),返回的结果分别是马云和李猴子

如果我不想重复计算相同的数据,那么在计数的列名前面加distinct


SELECT


mySQL中统计男女分别有多少人 mysql查询女生人数_.net函数查询_08


接下来我们进行习题练习:

  • 查询课程学号为‘0002’的总成绩
SELECT


  • 查询选了课程的学生人数
SELECT


注意:

1、所有的汇总函数都可以使用DISTINCT,在汇总函数的参数中使用DISTINCT,可以删除重复数据


二、分组(GROUP BY子句)

我想将student表中的数据按照性别进行分组统计男生和女生各有多少人,那么查询语法为:


SELECT


mySQL中统计男女分别有多少人 mysql查询女生人数_mySQL中统计男女分别有多少人_09


对某列进行分组,那么该列的列名就被称为聚合建,上面的例子中,“性别”这一列就是聚合建。

使用GROUP BY子句常见易错知识点:

1、使用GROUP BY子句中,SELECT子句中不能出现聚合键之外的列名。总结一下就是SELECT子句中只能存在下面三种元素:

  • 常数
  • 汇总函数
  • GROUP BY子句中指定的列名(聚合键)

2GROUP BY子句不能使用SELECT子句中定义的别名,

因为SQL在执行中是先执行GROUP BY子句,后执行SELECT子句,所以在SELECT子句中定义的别名在SQL执行GROUP BY子句时,他是不知道这别名代表是什么东西。

3、GROUP BY子句的结果是无序的

接下来我们进行习题练习:

  • 查询各科成绩最高和最低的分
SELECT


  • 查询每门课程被选修的学生数
SELECT


  • 查询男生、女生人数
SELECT


三、对分组结果指定条件(HAVING子句)

如果我想从student表中只查询出男生的人数,而不要女生的人数。


SELECT


mySQL中统计男女分别有多少人 mysql查询女生人数_mysql count null_10


注意:

1、HAVING子句和SELECT子句一样,只能存在下面三种元素:

  • 常数
  • 汇总函数
  • GROUP BY子句中指定的列名(聚合键)

2、聚合键所对应的条件建议写在WHERE子句中,而不是HAVING子句中,这样可以提高运算速度,SQL语句也更容易理解。他们两者的作用区别 可以理解为:

WHERE子句=指定行所对应的的条件

HAVING子句=指定组所对应的条件

接下来我们进行习题练习:

  • 查询平均成绩大于60分学生的学号和平均成绩
SELECT


  • 查询至少选修两门功课的学生的学号
SELECT


  • 查询同名同姓学生名单并统计同名人数
SELECT


  • 查询每门课程的平均成绩,并且平均成绩大于等于60分
SELECT



四、对查询结果排序(ORDER BY)

  • 将成绩按降序进行排序(从大到小):
SELECT


mySQL中统计男女分别有多少人 mysql查询女生人数_.net函数查询_11


  • 将成绩按升序进行排序(从小到大):(下面程序不加ASC也是可以的,不加排序条件情况下,默认是从小到大,升序排列)
SELECT


mySQL中统计男女分别有多少人 mysql查询女生人数_mysql count null_12


  • 查询每门课程的平均成绩,并且平均成绩大于等于60分,并按降序进行排序(从大到小):
SELECT


  • 对多列进行排序,会按列名从左到右排序
SELECT


mySQL中统计男女分别有多少人 mysql查询女生人数_mySQL中统计男女分别有多少人_13


上面查询语句中先按成绩升序排列,成绩相同时课程号按照降序排列。

  • 空值(null)的排序(空值会在查询结果的开头或者末尾显示)
SELECT


mySQL中统计男女分别有多少人 mysql查询女生人数_mysql count null_14

MYSQL这里NULL是在开头显示

注意:在ORDER BY子句中可以使用聚合函数或者使用SELECT子句中未使用的列

  • 如果查询出来的结果有几万行,我只想看前三行,那么该怎么办?
SELECT


mySQL中统计男女分别有多少人 mysql查询女生人数_mysql count null_15


  • 如果我想查询第4行后面的2行数据,要怎么办?
SELECT


mySQL中统计男女分别有多少人 mysql查询女生人数_.net函数查询_16


接下来我们进行习题练习:

  • 查询不及格的课程并按课程号从大到小排列
SELECT


  • 查询每门课程的平均成绩,结果按照平均成绩升序排列,平均成绩相同时,按课程号进行降序排列
SELECT


欢迎大家看看我写的其他MySQL基础知识系列文章,希望对你们有所帮助!

1、MySQL基础入门知识

假装在念书:MySQL基础知识—入门篇zhuanlan.zhihu.com

mySQL中统计男女分别有多少人 mysql查询女生人数_.net函数查询_17


2、MySQL基础知识—简单查询

假装在念书:MySQL基础知识—简单查询zhuanlan.zhihu.com

mySQL中统计男女分别有多少人 mysql查询女生人数_.net函数查询_17


4、MySQL基础知识—复杂查询

假装在念书:MySQL基础知识—复杂查询zhuanlan.zhihu.com

mySQL中统计男女分别有多少人 mysql查询女生人数_.net函数查询_17


5、MySQL基础知识—多表查询

假装在念书:MySQL基础知识—多表查询zhuanlan.zhihu.com

mySQL中统计男女分别有多少人 mysql查询女生人数_.net函数查询_17


五、实践出真知

现在我们打开SQLZOO网站:https://sqlzoo.net/,点击下面图片红色框选部分,开始习题练习,进行查询语句的练习:


mySQL中统计男女分别有多少人 mysql查询女生人数_mysql count null_21



第一部分、选择诺贝尔奖

第一题代码:


SELECT


mySQL中统计男女分别有多少人 mysql查询女生人数_mysql count null_22


第二题代码:


SELECT


mySQL中统计男女分别有多少人 mysql查询女生人数_.net函数查询_23


第三题代码:


SELECT


mySQL中统计男女分别有多少人 mysql查询女生人数_.net函数查询_24


第四题代码:


SELECT


mySQL中统计男女分别有多少人 mysql查询女生人数_.net函数查询_25


第五题代码:


SELECT


mySQL中统计男女分别有多少人 mysql查询女生人数_mySQL中统计男女分别有多少人_26


第六题代码:


SELECT


mySQL中统计男女分别有多少人 mysql查询女生人数_.net函数查询_27


第七题代码:


SELECT


mySQL中统计男女分别有多少人 mysql查询女生人数_mysql count null_28


第八题代码:


SELECT


mySQL中统计男女分别有多少人 mysql查询女生人数_.net函数查询_29


第九题代码:


SELECT


mySQL中统计男女分别有多少人 mysql查询女生人数_.net函数查询_30


第十题代码:


SELECT


mySQL中统计男女分别有多少人 mysql查询女生人数_mysql count null_31


第十一题代码:


SELECT


mySQL中统计男女分别有多少人 mysql查询女生人数_.net函数查询_32


第十二题代码:


SELECT


mySQL中统计男女分别有多少人 mysql查询女生人数_.net函数查询_33


第十三题代码:


SELECT


mySQL中统计男女分别有多少人 mysql查询女生人数_.net函数查询_34


第十四题代码:


SELECT


mySQL中统计男女分别有多少人 mysql查询女生人数_.net函数查询_35



第二部分、SUM和COUNT

第一题代码:


SELECT


mySQL中统计男女分别有多少人 mysql查询女生人数_.net函数查询_36


第二题代码:


SELECT


mySQL中统计男女分别有多少人 mysql查询女生人数_.net函数查询_37


第三题代码:


SELECT


mySQL中统计男女分别有多少人 mysql查询女生人数_mySQL中统计男女分别有多少人_38


第四题代码:


SELECT


mySQL中统计男女分别有多少人 mysql查询女生人数_mySQL中统计男女分别有多少人_39


第五题代码:


SELECT  sum(population)
FROM world
WHERE name IN ('Estonia','Latvia','Lithuania');


mySQL中统计男女分别有多少人 mysql查询女生人数_mysql count null_40


第六题代码:


SELECT


mySQL中统计男女分别有多少人 mysql查询女生人数_.net函数查询_41


第七题代码:


SELECT


mySQL中统计男女分别有多少人 mysql查询女生人数_mySQL中统计男女分别有多少人_42


第八题代码:


SELECT


mySQL中统计男女分别有多少人 mysql查询女生人数_mySQL中统计男女分别有多少人_43