在学生表中查询出学号、姓名、入学日期,及以自己年龄为标准,在学生表中通过case表达式,将比自己年龄大的女生替换为“师姐”,将比自己年龄大的男生替换为“师兄”,将比自己年龄小的女生替换为“师妹”,将比自己年龄小的男生替换为“师弟”,其他都替换为“同学”。
时间: 2023-06-13 17:08:50 浏览: 373
假设学生表的表名为student,其中包含以下字段:学号(id)、姓名(name)、性别(gender)、出生日期(birthday)、入学日期(enrollment_date)。
可以使用如下SQL语句实现:
```
SELECT id, name, enrollment_date,
CASE
WHEN gender='女' AND birthday<(SELECT birthday FROM student WHERE name='自己的姓名') THEN '师姐'
WHEN gender='男' AND birthday<(SELECT birthday FROM student WHERE name='自己的姓名') THEN '师兄'
WHEN gender='女' AND birthday>(SELECT birthday FROM student WHERE name='自己的姓名') THEN '师妹'
WHEN gender='男' AND birthday>(SELECT birthday FROM student WHERE name='自己的姓名') THEN '师弟'
ELSE '同学'
END AS relation
FROM student;
```
其中,通过子查询获取自己的出生日期,然后使用CASE表达式进行判断,根据不同的条件替换为不同的关系称呼。最终查询结果包括学号、姓名、入学日期和关系称呼。
相关问题
为表 sc创建一个视图s_grade(sno,sname,cou_cnt,avg_grade,fail_cnt),包括有各个学生学号、姓名、选修课程的门数、平均分及不及格门数。
创建视图的 SQL 语句如下:
```sql
CREATE VIEW s_grade AS
SELECT
sc.sno,
s.sname,
COUNT(DISTINCT sc.cno) AS cou_cnt,
AVG(sc.grade) AS avg_grade,
SUM(CASE WHEN sc.grade < 60 THEN 1 ELSE 0 END) AS fail_cnt
FROM
sc
JOIN student s ON sc.sno = s.sno
GROUP BY
sc.sno,
s.sname;
```
解释:
1. 创建视图的语法:`CREATE VIEW 视图名 AS SELECT 语句`。
2. 在 SELECT 语句中,我们需要从 sc 表中查询学生的学号和成绩,以及从 student 表中查询学生的姓名。
3. 使用 JOIN 连接 sc 表和 student 表,通过学号进行关联。
4. 聚合函数 COUNT 和 AVG 分别用于计算每个学生选修课程的门数和平均分。
5. 使用 SUM 函数结合 CASE 表达式计算每个学生不及格的课程数量。
6. 最后,使用 GROUP BY 子句按照学号和姓名进行分组,确保每个学生只出现一次。
阅读全文