sql中的CASE WHEN的入门使用

sql中的CASE WHEN的入门使用

CASE WHEN条件表达式函数:类似JAVA中的IF ELSE语句。
格式:

CASE WHEN condition THEN result
 
[WHEN...THEN...]
 
ELSE result
 
END

案例一、有分数score,score<60返回不及格,score>=60返回及格,score>=80返回优秀

  • 1.建表语句
CREATE TABLE `stu` (
  `STU_CODE` varchar(16) DEFAULT NULL,
  `STU_NAME` varchar(255) DEFAULT NULL,
  `SEX` tinyint DEFAULT NULL,
  `STU_SCORE` int DEFAULT NULL
) 
  • 2.数据
INSERT INTO `stu` VALUES ('XM', '小明', '0', '88');
INSERT INTO `stu` VALUES ('XL', '小磊', '0', '55');
INSERT INTO `stu` VALUES ('XF', '小峰', '0', '45');
INSERT INTO `stu` VALUES ('XH', '小红', '1', '66');
INSERT INTO `stu` VALUES ('XN', '晓妮', '1', '77');
INSERT INTO `stu` VALUES ('XY', '小伊', '1', '99');
INSERT INTO `stu` VALUES ('XG', '小光', '0', null);
  • 3.sql数据
SELECT
	STU_NAME,
	(
		CASE
		WHEN STU_SCORE < 60 THEN
			'不及格'
		WHEN STU_SCORE >= 60
		AND STU_SCORE < 80 THEN
			'及格'
		WHEN STU_SCORE > 80 THEN
			'优秀'
		WHEN STU_SCORE IS NULL THEN
			'缺席考试'
		ELSE
			'异常'
		END
	) AS REMARK
FROM
	stu;

案例二、现老师要统计班中,有多少男同学,多少女同学,并统计男同学中有几人及格,女同学中有几人及格,要求用一个SQL输出结果。

使用的是上面的语句,直接上sql

SELECT
	sum(CASE WHEN SEX = 0 THEN 1 ELSE 0 END) AS MALE_COUNT,
	SUM(CASE WHEN SEX = 1 THEN 1 ELSE 0 END) AS FEMALE_COUNT,
	SUM(
		CASE
		WHEN STU_SCORE > 60
		AND SEX = 0 THEN
			1
		ELSE
			0
		END
	) AS MALE_PASS,
	SUM(
		CASE
		WHEN STU_SCORE > 60
		AND SEX = 1 THEN
			1
		ELSE
			0
		END
	) AS FEMALE_PASS
FROM
	stu;

案例三现要求统计各个城市,总共使用了多少水耗、电耗、热耗,使用一条SQL语句输出结果

  • 1.建表语句
CREATE TABLE `e` (
  `E_CODE` varchar(16) DEFAULT NULL,
  `E_VALUE` double(16,3) DEFAULT NULL,
  `E_TYPE` tinyint DEFAULT NULL
)
  • 2.插入的数据
INSERT INTO `e` VALUES ('北京', '28.500', '0');
INSERT INTO `e` VALUES ('北京', '23.510', '1');
INSERT INTO `e` VALUES ('北京', '28.120', '2');
INSERT INTO `e` VALUES ('北京', '12.300', '0');
INSERT INTO `e` VALUES ('北京', '15.460', '1');
INSERT INTO `e` VALUES ('上海', '18.880', '0');
INSERT INTO `e` VALUES ('上海', '16.660', '1');
INSERT INTO `e` VALUES ('上海', '19.990', '0');
INSERT INTO `e` VALUES ('上海', '10.050', '0');
  • 3.废话不多说,直接上sql
SELECT
	*
FROM
	e;

SELECT
	e_code,
	SUM(
		CASE
		WHEN e_type = 0 THEN
			E_value
		ELSE
			0
		END
	) AS shui,
	SUM(
		CASE
		WHEN e_type = 1 THEN
			E_value
		ELSE
			0
		END
	) AS dian,
	SUM(
		CASE
		WHEN e_type = 2 THEN
			E_value
		ELSE
			0
		END
	) AS re
FROM
	e
GROUP BY
	e_code;

第二种语法

select case sex when '男' then 1
when '女' then 0 end as sex from stu;
posted @ 2021-07-29 00:12  King-DA  阅读(362)  评论(0)    收藏  举报