根据如下数据表写出SQL语句 学生信息表(student) 学号(id) 姓名(name) 001 张三 李四 003 王五 年龄(age) 16 16 n 学生成绩表(score) 学号(id) 00I 001 002 002 科目 (sub) 语文 数学 语文 数学 分数(sco) 85 95 60 603、请写出 SQL,统计每个学生的总分,并按总总分降序排序。查询结果如下:姓名(name)总分 (total) 学号(id) 001 002 003 张三 李四 王五 180 120 0
时间: 2023-12-12 13:04:06 浏览: 144
可以使用如下SQL语句:
```
SELECT s.name AS name, COALESCE(SUM(sc.sco), 0) AS total, s.id AS id
FROM student s LEFT JOIN score sc
ON s.id = sc.id
GROUP BY s.id, s.name
ORDER BY total DESC;
```
解释一下:
- 首先从学生信息表(student)中选择学生姓名(name)和学号(id),并且使用LEFT JOIN连接到学生成绩表(score)中。
- 使用COALESCE函数将SUM函数的结果转换为0,因为如果某个学生没有成绩,则SUM函数返回NULL,这会导致排序出错。
- 使用GROUP BY将结果按学号(id)和姓名(name)分组计算每个学生的总分。
- 使用ORDER BY将结果按照总分(total)降序排序。
相关问题
创建一个student表,并插入十条学生信息,写出sql语句
创建一个名为"student"的学生表,包含常见的字段如学号(id)、姓名(name)、年龄(age)和专业(major),你可以使用以下SQL语句:
```sql
CREATE TABLE student (
id INT PRIMARY KEY,
name VARCHAR(50) NOT NULL,
age INT,
major VARCHAR(100)
);
```
这个表定义了一个主键(id),用于唯一标识每个学生。
接下来,如果你想要插入十条学生信息,每条记录的数据格式应该类似这样:
```sql
INSERT INTO student (id, name, age, major)
VALUES
(1, '张三', 18, '计算机科学'),
(2, '李四', 19, '文学'),
(3, '王五', 20, '数学'),
... (继续添加直到第十条)
```
由于实际数据量大,这里只列举了三条,你需要自行填充剩余的信息。在实际操作中,一次性插入多条记录通常会用到`VALUES`子句的列表形式或者批量插入的语法,取决于数据库管理系统。
Student 表: num name age scoreid 97001 张三 23 1002 97002 李四 21 1005 97003 王五 NULL 1001 97004 赵六 22 1004 97005 吴七 20 1003 Socre 表: num linux C cpp 1001 56 67 80 1002 72 84 59 1003 49 60 60 1004 80 72 55 1005 61 20 57 (1) 写出创建student表的sql语句(num 为主键), (2) 写出sql语句,将age 的类型由 int 修改为 tiny int; (3) 写出sql语句查出李四同学的 C++ (字段名为cpp)的成绩 ; (4) 写出sql语句,显示姓名为李四,吴七,张三的学号(num); (5) 请写出sql,删除年龄(age)为NULL的记录。
(1) 创建Student表的SQL语句:
```mysql
CREATE TABLE Student (
num VARCHAR(20) PRIMARY KEY,
name VARCHAR(20),
age INT,
scoreid VARCHAR(20)
);
```
(2) 将age的类型由int修改为tinyint的SQL语句:
```mysql
ALTER TABLE Student MODIFY age TINYINT;
```
(3) 查出李四同学的C++(字段名为cpp)的成绩的SQL语句:
```mysql
SELECT cpp FROM Student s, Score sc WHERE s.num=sc.num AND s.name='李四';
```
(4) 显示姓名为李四、吴七、张三的学号(num)的SQL语句:
```mysql
SELECT num FROM Student WHERE name IN ('李四', '吴七', '张三');
```
(5) 删除年龄(age)为NULL的记录的SQL语句:
```mysql
DELETE FROM Student WHERE age IS NULL;
```
阅读全文
相关推荐
















