目录
1、用一条SQL语句进行不同条件的统计
建表语句(MySQL8):
CREATE TABLE `city_population` (
`city` VARCHAR(50) NULL DEFAULT NULL COMMENT '城市' COLLATE 'utf8mb4_0900_ai_ci',
`sex` TINYINT(3) NULL DEFAULT NULL COMMENT '性别',
`population` INT(10) NULL DEFAULT NULL COMMENT '人口(万)'
)
COMMENT='城市人口表'
COLLATE='utf8mb4_0900_ai_ci'
ENGINE=InnoDB
;
录入数据:
*按性别统计SQL
SELECT
city,
SUM(case when sex = 1 then population ELSE 0 END) AS 男,
SUM(case when sex = 2 then population ELSE 0 END) AS 女
FROM city_population
GROUP BY city
输出结果(行列转换)
2、在UPDATE语句里进行条件分支
建表语句(MySQL8):
CREATE TABLE `people_salary` (
`name` VARCHAR(50) NULL DEFAULT NULL COMMENT '员工' COLLATE 'utf8mb4_0900_ai_ci',
`salary` INT(10) NULL DEFAULT NULL COMMENT '薪资'
)
COMMENT='员工薪资表'
COLLATE='utf8mb4_0900_ai_ci'
ENGINE=InnoDB
;
录入数据:
要求:
对工资30000以上(含)的员工降薪10%
对工资28000以下的员工加薪20%
按要求编写SQL:
UPDATE people_salary
SET
salary = case
when salary >= 30000
then salary * 0.9
when salary <= 28000
then salary * 1.2
ELSE salary END
输出结果:
3、课程表行列转换
建表语句(MySQL8)
CREATE TABLE `courses` (
`name` VARCHAR(50) NULL DEFAULT NULL COMMENT '姓名' COLLATE 'utf8mb4_0900_ai_ci',
`course` VARCHAR(50) NULL DEFAULT NULL COMMENT '课程' COLLATE 'utf8mb4_0900_ai_ci'
)
COMMENT='课程表'
COLLATE='utf8mb4_0900_ai_ci'
ENGINE=InnoDB
;
录入数据:
要求:
展示学生的课程选择信息。
SQL:
SELECT NAME,case when SUM(case when course = 'SQL入门' then 1 ELSE NULL END ) = 1 then 'O' ELSE NULL END AS 'SQL入门',
case when SUM(case when course = 'UNIX基础' then 1 ELSE NULL END ) = 1 then 'O' ELSE NULL END AS 'UNIX基础',
case when SUM(case when course = 'Java中级' then 1 ELSE NULL END ) = 1 then 'O' ELSE NULL END AS 'Java中级'
FROM courses
GROUP BY NAME;