0


MySQL场景分析--按照班级查询,并统计各班级男、女的人数和总人数

MySQL面试–按照班级查询,并统计各班级男、女的人数和总人数

场景

现在有一张学生表,字段如下。请按照班级查询,并统计各班级男、女的人数和总人数。

image-20220718122739177

CREATETABLE`Student`(`ID`intNOTNULL,`NAME`varchar(255)DEFAULTNULLCOMMENT'姓名',`SEX`varchar(255)DEFAULTNULLCOMMENT'性别',`CLASS`varchar(255)DEFAULTNULLCOMMENT'班级',PRIMARYKEY(`ID`))ENGINE=InnoDBDEFAULTCHARSET=utf8mb3;
INSERTINTO`test`.`Student`(`ID`,`NAME`,`SEX`,`CLASS`)VALUES(1,'Jack','男','1');INSERTINTO`test`.`Student`(`ID`,`NAME`,`SEX`,`CLASS`)VALUES(2,'Tom','男','2');INSERTINTO`test`.`Student`(`ID`,`NAME`,`SEX`,`CLASS`)VALUES(3,'Lily','女','1');INSERTINTO`test`.`Student`(`ID`,`NAME`,`SEX`,`CLASS`)VALUES(4,'Rose','女','2');

解决

-- 按照班级统计男、女的人数SELECT
    t1.CLASS,COUNT( ID )AS 班级人数,SUM(CASEWHEN t1.sex ='男'THEN1ELSE0END)AS male,SUM(CASEWHEN t1.SEX ='女'THEN1ELSE0END)AS female 
FROM
    Student t1 
GROUPBY t1.CLASS;

image-20220718140151937

重点分析

Group by

SQL GROUP BY 子句用来根据指定的字段对结果集(选取的数据)进行分组,如果某些记录的指定字段具有相同的值,那么它们将被合并为一条数据。

通俗地理解,GROUP BY 子句将根据指定的字段合并数据行。

借助 SQL 聚合函数,您可以对分组的数据进行再次加工,例如:

  • SUM( ) 函数可以对指定字段的值进行求和
  • COUNT( ) 函数可以计算某个分组内数据的条数
  • AVG( ) 函数可以对指定字段的值求平均数

流程控制语句

完整的流程控制语句的讲解:MySQL流程控制语句详解 (biancheng.net)。下面之会涉及到

CASE

SUM(CASEWHEN 
                            t1.sex ='男'THEN1ELSE0END)AS male
CASE

语句也是用来进行条件判断的,它提供了多个条件进行选择,可以实现比

IF

语句更复杂的条件判断。

CASE

语句的基本形式如下:

CASE case_value
    WHEN when_value THEN statement_list
    [WHEN when_value THEN statement_list]...[ELSE statement_list]ENDCASE其中:
  • case_value 参数表示条件判断的变量,决定了哪一个 WHEN 子句会被执行;
  • when_value 参数表示变量的取值,如果某个 when_value 表达式与 case_value 变量的值相同,则执行对应的 THEN 关键字后的 statement_list 中的语句;
  • statement_list 参数表示 when_value 值没有与 case_value 相同值时的执行语句。
  • CASE 语句都要使用 END CASE 结束。
CASE

语句还有另一种形式。该形式的语法如下:

CASEWHEN search_condition THEN statement_list
    [WHEN search_condition THEN statement_list]...[ELSE statement_list]ENDCASE

其中,

search_condition

参数表示条件判断语句;

statement_list

参数表示不同条件的执行语句。

与上述语句不同的是,该语句中的

WHEN

语句将被逐个执行,直到某个

search_condition

表达式为真,则执行对应

THEN

关键字后面的

statement_list

语句。如果没有条件匹配,

ELSE

子句里的语句被执行。

注意⚠️:这里介绍的

CASE

语句与“控制流程函数”里描述的 SQL CASE 表达式的 CASE 语句有轻微的不同。这里的 CASE 语句不能有

ELSE NULL

语句,并且用

END CASE

替代

END

来终止。

标签: mysql java 数据库

本文转载自: https://blog.csdn.net/weixin_46487176/article/details/125846574
版权归原作者 丁川 所有, 如有侵权,请联系我们删除。

“MySQL场景分析--按照班级查询,并统计各班级男、女的人数和总人数”的评论:

还没有评论