要求使用SQL语言给出代码和结果基于学生300215121的平均成绩输出杨辉三角,若成绩大于60分,则输出前10行,否则输出5行。查询SC中有没有同学选修经济学课程,如果有,统计选修人数,否则显示“本学期没有同学选修经济学课程”。
时间: 2024-05-04 17:19:46 浏览: 82
1. 输出杨辉三角
若成绩大于60分,则输出前10行,否则输出5行。假设学生表名为`students`,课程表名为`courses`,成绩表名为`scores`,成绩的列名为`score`,学生ID的列名为`sid`,课程ID的列名为`cid`。
```sql
-- 输出杨辉三角
WITH RECURSIVE pascal(n, m, val) AS (
SELECT 1, 1, 1
UNION ALL
SELECT n+1, m+1, val*(n+1-m)/m FROM pascal WHERE n < 10
)
SELECT group_concat(val, ' ') FROM pascal GROUP BY n;
```
上述 SQL 代码使用了递归公式计算杨辉三角,并使用了 group_concat 函数将每一行的数字拼接成字符串输出。
根据题意,我们需要判断学生的平均成绩是否大于60分,并输出不同的行数。假设学生的平均成绩可以通过以下 SQL 查询得到:
```sql
SELECT AVG(score) FROM scores WHERE sid = '300215121';
```
结合上述代码,我们可以使用以下 SQL 代码输出杨辉三角:
```sql
WITH RECURSIVE pascal(n, m, val) AS (
SELECT 1, 1, 1
UNION ALL
SELECT n+1, m+1, val*(n+1-m)/m FROM pascal WHERE n < CASE WHEN (SELECT AVG(score) FROM scores WHERE sid = '300215121') > 60 THEN 10 ELSE 5 END
)
SELECT group_concat(val, ' ') FROM pascal GROUP BY n;
```
2. 统计选修经济学课程的人数
假设经济学课程的课程ID为`101`,我们可以使用以下 SQL 代码查询选修经济学课程的人数:
```sql
SELECT COUNT(DISTINCT sid) FROM scores WHERE cid = '101';
```
若选修人数为0,则显示“本学期没有同学选修经济学课程”:
```sql
SELECT
CASE
WHEN COUNT(DISTINCT sid) > 0 THEN COUNT(DISTINCT sid)
ELSE '本学期没有同学选修经济学课程'
END AS num_of_students
FROM scores
WHERE cid = '101';
```
阅读全文