MySQL面试–按照班级查询,并统计各班级男、女的人数和总人数
场景
现在有一张学生表,字段如下。请按照班级查询,并统计各班级男、女的人数和总人数。
CREATE TABLE `Student` (
`ID` int NOT NULL,
`NAME` varchar(255) DEFAULT NULL COMMENT '姓名',
`SEX` varchar(255) DEFAULT NULL COMMENT '性别',
`CLASS` varchar(255) DEFAULT NULL COMMENT '班级',
PRIMARY KEY (`ID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3;
INSERT INTO `test`.`Student` (`ID`, `NAME`, `SEX`, `CLASS`) VALUES (1, 'Jack', '男', '1');
INSERT INTO `test`.`Student` (`ID`, `NAME`, `SEX`, `CLASS`) VALUES (2, 'Tom', '男', '2');
INSERT INTO `test`.`Student` (`ID`, `NAME`, `SEX`, `CLASS`) VALUES (3, 'Lily', '女', '1');
INSERT INTO `test`.`Student` (`ID`, `NAME`, `SEX`, `CLASS`) VALUES (4, 'Rose', '女', '2');
解决
-- 按照班级统计男、女的人数
SELECT
t1.CLASS,
COUNT( ID ) AS 班级人数,
SUM( CASE WHEN t1.sex = '男' THEN 1 ELSE 0 END ) AS male,
SUM( CASE WHEN t1.SEX = '女' THEN 1 ELSE 0 END ) AS female
FROM
Student t1
GROUP BY t1.CLASS;
重点分析
Group by
SQL GROUP BY 子句用来根据指定的字段对结果集(选取的数据)进行分组,如果某些记录的指定字段具有相同的值,那么它们将被合并为一条数据。
通俗地理解,GROUP BY 子句将根据指定的字段合并数据行。
借助 SQL 聚合函数,您可以对分组的数据进行再次加工,例如:
SUM( )
函数可以对指定字段的值进行求和;COUNT( )
函数可以计算某个分组内数据的条数;AVG( )
函数可以对指定字段的值求平均数。
流程控制语句
完整的流程控制语句的讲解:MySQL流程控制语句详解 (biancheng.net)。下面之会涉及到
CASE
。
SUM(CASE WHEN
t1.sex = '男'
THEN
1
ELSE
0 END )
AS male
CASE
语句也是用来进行条件判断的,它提供了多个条件进行选择,可以实现比 IF
语句更复杂的条件判断。
CASE
语句的基本形式如下:
CASE case_value
WHEN when_value THEN statement_list
[WHEN when_value THEN statement_list]...
[ELSE statement_list]
END CASE其中:
-
case_value
参数表示条件判断的变量,决定了哪一个WHEN
子句会被执行; -
when_value
参数表示变量的取值,如果某个when_value
表达式与case_value
变量的值相同,则执行对应的THEN
关键字后的statement_list
中的语句; -
statement_list
参数表示when_value
值没有与case_value
相同值时的执行语句。 -
CASE
语句都要使用END CASE
结束。
CASE
语句还有另一种形式。该形式的语法如下:
CASE
WHEN search_condition THEN statement_list
[WHEN search_condition THEN statement_list] ...
[ELSE statement_list]
END CASE
其中,search_condition
参数表示条件判断语句;statement_list
参数表示不同条件的执行语句。
与上述语句不同的是,该语句中的 WHEN
语句将被逐个执行,直到某个 search_condition
表达式为真,则执行对应 THEN
关键字后面的 statement_list
语句。如果没有条件匹配,ELSE
子句里的语句被执行。文章来源:https://www.toymoban.com/news/detail-446864.html
注意⚠️:这里介绍的
CASE
语句与“控制流程函数”里描述的 SQL CASE 表达式的 CASE 语句有轻微的不同。这里的 CASE 语句不能有ELSE NULL
语句,并且用END CASE
替代END
来终止。文章来源地址https://www.toymoban.com/news/detail-446864.html
到了这里,关于MySQL场景分析--按照班级查询,并统计各班级男、女的人数和总人数的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!