name score1 score2 score3
A 70 80 90
B 85 75 95
C 69 74 58
D 54 36 21
如上,学生A,B,C,D分别有3科的成绩,现在想查出每个学生的最高分:
name maxscore
A 90
B 95
C 74
D 54
遇到这种列变行的当然就是用union了。。
select name, max(score) as ms from (
select score1 as score, name , 'score1' as course from student
union all
select score2 as score, name , 'score2' as course from student
union all
select score3 as score, name , 'score3' as course from student) t
group by t.name
先是把所有列变成name score的两列,然后就选最大的。
问题是,如果要把科目也选上,那要怎么写。
想了好久没想到,只能用笨方法:
select t2.name,t2.ms, t3.course from
(select name, max(score) as ms from (
select score1 as score, name , 'score1' as course from student
union all
select score2 as score, name , 'score2' as course from student
union all
select score3 as score, name , 'score3' as course from student) t
group by t.name) t2 left join (
select score1 as score, name , 'score1' as course from student
union all
select score2 as score, name , 'score2' as course from student
union all
select score3 as score, name , 'score3' as course from student) t3
on t2.name = t3.name and t2.ms=t3.score
这样结果是出来了,但是效率却不高,而且t和t3的代码是一样的。
A 90 score3
B 95 score3
C 74 score2
D 54 score1
不知道什么优化的方法?
分享到:
相关推荐
【SQL语句练习提高】 在SQL中,查询和操作数据是其核心功能。以下通过给出的练习题目,我们将深入理解SQL的基本句式和用法。 28. 题目要求从`employee`表中抽取部门名称(depart_name),计算平均工资(avg(wage)...
要查询每个员工所在的部门名称,可以使用以下SQL语句: ```sql SELECT e.emp_id, e.emp_name, d.dept_name FROM employee e INNER JOIN department d ON e.dept_id = d.dept_id; ``` 此查询将员工表(`employee`)...
这条 SQL 语句用于删除表 `tablename` 中的重复记录,保留每个组中 `id` 最大的记录。这种操作通常用于数据清理,例如: - 当表中有重复数据时,可以通过这种方式保留一条记录,删除其他重复项。 - 在导入大量数据...
### SQL语句基础教程知识点概览 #### 一、SQL简介 - **定义与功能**: - **SQL**(Structured Query Language,结构化查询语言)是一种强大的数据库语言,广泛应用于数据库之间的通信。 - SQL被视为关系型数据库...
- 选出每门课最高分和最低分的学生。 - 查找某个班级的男女学生比例。 - 联合STUDENT和TEACHER表找出所有教授“计算机导论”的教师信息。 - 分析各科成绩分布,找出得分最高和最低的课程。 通过这些练习,可以深入...
在 SQL 语句中,有许多不同的指令,每种指令都有其特定的用途。本文将详细介绍 SELECT 指令、DISTINCT 子句、WHERE 指令、AND 和 OR 运算符、IN 指令等。 SELECT 指令 SELECT 指令是 SQL 语句中最基本的指令,用于...
它使用了嵌套的子查询,比较每个学生在这两门课程的成绩。 2. 查询所有平均成绩大于60分的学生的学号和平均成绩。使用`AVG()`函数计算平均成绩,`GROUP BY`按学号分组,`HAVING`筛选出平均成绩大于60的学生。 3. ...
具体实现方法是首先使用一个子查询结合变量(@rowNum)来为每个记录分配一个唯一的行号,然后通过外部查询选出每个学生的成绩和行号,最后通过降序排列(DESC)来确保行号是按照成绩从高到低排列的。 接下来,关于...
MySQL 查询语句学生表、课程表、成绩表、教师表 本文档提供了 8 个关于学生表、课程表、成绩表、教师表的常用 SQL 查询语句,这些查询语句涵盖了基本的数据检索、数据分析、数据统计等方面,对于 MySQL 数据库的...
在深入探索SQL多表关联语句的执行原理之前,先来了解几个概念。首先是嵌套循环关联(nested-loop join),这是一种基本的关联执行原理。当执行多表关联查询时,系统会先在一个驱动表(driver table)中根据WHERE条件...
这个SQL语句将返回每个班级的前三名随机学生。如果每个班都有30名学生,那么每个班级都会有3个名字被选中,用于学校的清洁工作。这种方法保证了每个班级的公平性和随机性,避免了人工干预导致的不公。
给出两个表`T1`和`T2`,每个表都只包含一个字段`ID`(整数类型)。`T1`中有4条记录:1,2,3,4;`T2`中有3条记录:2,4,5。 **题目解析:** 1. **执行后的结果:** 给定SQL语句为:`SELECT T1.ID, T2.ID FROM ...
例如,“SELECT store_name, SUM(sales) FROM Store_Information GROUP BY store_name”,将按店名分组并计算每个店的总销售额。 10. HAVING子句用于过滤GROUP BY的结果集,它与WHERE子句类似,但HAVING可以使用...
例如,教师可以给出一系列的关系代数表达式,让学生们尝试用SQL语句来表达相同的操作。通过这样的练习,学生不仅能够加深对关系代数运算逻辑的理解,还能提高使用SQL语言进行数据库操作的能力。 同时,为了更好地...
在SQL Server中,选择指定范围行的SQL语句通常是用于数据分页查询或者特定行的提取,这在处理大量数据时非常有用。由于标准的SQL语法并不直接支持直接选取特定行号的记录,我们需要采取一些策略来实现这个功能。下面...
以下是一些关于SQL语句的精彩示例及其详细解释: 1. **复制表的结构而不复制数据** ```sql SELECT * INTO b FROM a WHERE 1<>1 ``` 这个语句用于创建一个新表b,其结构与表a相同,但不包含任何数据。`WHERE 1<>...
结合`SC`和`Course`表,计算每个学生的总学分,筛选学分小于10的记录: ```sql SELECT Student.Sname FROM Student, SC, Course WHERE Student.Sno = SC.Sno AND SC.cno = Course.cno GROUP BY Student....
`GROUP BY`子句用于按照`学号`, `姓名`, `课程编号`, `课程名`, 和`分数`分组,而`MIN(自动编号)`则用来选出每个分组中自动编号最小的记录。 2. **主查询**: ```sql DELETE FROM Exam WHERE 自动编号 NOT IN (子...
它是SQL语言中最为重要的语句之一,几乎每个数据库操作都会涉及到它。通过SELECT语句,用户能够指定想要从数据库中检索的数据列、行和其他相关条件。 ### SELECT语句的组成 SELECT语句的主要子句包括:ALL(或...