【sql】case when用法

简单case函数:

格式:

case 列名
	when 条件1 then 表达式1
	when 条件2 then 表达式2
	······
	else 表达式
end
  • case函数只返回第一个符合条件的值,剩下的部分将会被自动忽略
  • else 可以省略

例: 查询学生的学号、姓名、性别、年龄、院系,对于性别按以下规定显示:性别为男则显示为男生;性别为女则显示为女生。

select sno 学号, sname 姓名, 
	case ssex
		when '男' then '男生'
		when '女' then '女生'
	end 性别, sage 年龄, sdept 院系
from student;

case搜索函数:

格式:

case 
	when 条件1 then 表达式1
	when 条件2 then 表达式2
	······
	else 表达式
end

例: 查询学生的学号、课程号及成绩,对于成绩按以下规定显示:成绩在60分以下显示为不及格;60-79之间显示为良好;80以上显示为优秀。

select sno, cno,
	case
		when grade < 60 then '不合格'
		when grade <= 79 then '良好'
		else '优秀'
	end grade
from sc; 

相关实验题:

按照院系降序显示所有学生的 “院系,学号、姓名、性别、年龄”等信息,其中院系按照以下规定显示:院系为CS显示为计算机系,院系为IS显示为信息系,院系为MA显示为数学系,院系为EN显示为外语系,院系为CM显示为中医系,院系为WM显示为西医系,其他显示为院系不明;

select 
	case sdept
		when 'CS' then '计算机系'
		when 'IS' then '信息系'
		when 'MA' then '数学系'
		when 'EN' then '外语系'
		when 'CM' then '中医系'
		when 'WM' then '西医系'
		else '院系不明'
	end 院系, sno 学号, sname 姓名, ssex 性别, sage 年龄
from student
order by sdept desc;

【sql】case when用法_第1张图片


查询所有院系(要求不能重复,不包括空值),并在结果集中增加一列字段“院系规模”,其中若该院系人数>=5则该字段值为“规模很大”,若该院系人数大于等于4小于5则该字段值为“规模一般”, 若该院系人数大于等于2小于4则该字段值为“规模稍小”,否则显示“规模很小”;

select sdept 院系,
	case 
		when count(*) >= 5 then '规模很大'
		when count(*) >= 4 then '规模一般'
		when count(*) >= 2 then '规模稍小'
		else '规模很小'
	end 院系规模
from student
where sdept is not null
group by sdept

【sql】case when用法_第2张图片


显示选修各个课程的及格的人数,及格比率;

select cno, sum(case when grade >= 60 then 1 else 0 end) 及格人数,
	sum(case when grade >= 60 then 1 else 0 end) / count(*) 及格比率
from sc
group by cno;

显示各个院系男女生人数,其中在结果集中列标题分别指定为“院系名称、男生人数、女生人数”;

select sdept 院系名称,
	sum(case ssex when '男' then 1 else 0 end) 男生人数,
	sum(case ssex when '女' then 1 else 0 end) 女生人数
from student
group by sdept;

你可能感兴趣的:(数据库,sql,数据库)