`
kgdso
  • 浏览: 87941 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

选出每个学生的最大成绩的sql语句

阅读更多

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中,查询和操作数据是其核心功能。以下通过给出的练习题目,我们将深入理解SQL的基本句式和用法。 28. 题目要求从`employee`表中抽取部门名称(depart_name),计算平均工资(avg(wage)...

    SQL语句运用技巧

    要查询每个员工所在的部门名称,可以使用以下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语句大全 包括常有语句 新手必备

    这条 SQL 语句用于删除表 `tablename` 中的重复记录,保留每个组中 `id` 最大的记录。这种操作通常用于数据清理,例如: - 当表中有重复数据时,可以通过这种方式保留一条记录,删除其他重复项。 - 在导入大量数据...

    sql语句基础教程.doc

    ### SQL语句基础教程知识点概览 #### 一、SQL简介 - **定义与功能**: - **SQL**(Structured Query Language,结构化查询语言)是一种强大的数据库语言,广泛应用于数据库之间的通信。 - SQL被视为关系型数据库...

    sql语句练习

    - 选出每门课最高分和最低分的学生。 - 查找某个班级的男女学生比例。 - 联合STUDENT和TEACHER表找出所有教授“计算机导论”的教师信息。 - 分析各科成绩分布,找出得分最高和最低的课程。 通过这些练习,可以深入...

    SQL语句教程

    在 SQL 语句中,有许多不同的指令,每种指令都有其特定的用途。本文将详细介绍 SELECT 指令、DISTINCT 子句、WHERE 指令、AND 和 OR 运算符、IN 指令等。 SELECT 指令 SELECT 指令是 SQL 语句中最基本的指令,用于...

    50个经典SQL查询语句[参考].pdf

    它使用了嵌套的子查询,比较每个学生在这两门课程的成绩。 2. 查询所有平均成绩大于60分的学生的学号和平均成绩。使用`AVG()`函数计算平均成绩,`GROUP BY`按学号分组,`HAVING`筛选出平均成绩大于60的学生。 3. ...

    SQL语句整合

    具体实现方法是首先使用一个子查询结合变量(@rowNum)来为每个记录分配一个唯一的行号,然后通过外部查询选出每个学生的成绩和行号,最后通过降序排列(DESC)来确保行号是按照成绩从高到低排列的。 接下来,关于...

    mysql查询语句学生表、课程表、成绩表、教师表文.pdf

    MySQL 查询语句学生表、课程表、成绩表、教师表 本文档提供了 8 个关于学生表、课程表、成绩表、教师表的常用 SQL 查询语句,这些查询语句涵盖了基本的数据检索、数据分析、数据统计等方面,对于 MySQL 数据库的...

    93 深入探索多表关联的SQL语句到底是如何执行的?(3).pdf

    在深入探索SQL多表关联语句的执行原理之前,先来了解几个概念。首先是嵌套循环关联(nested-loop join),这是一种基本的关联执行原理。当执行多表关联查询时,系统会先在一个驱动表(driver table)中根据WHERE条件...

    随机抽取的sql语句 每班任意抽取3名学生

    这个SQL语句将返回每个班级的前三名随机学生。如果每个班都有30名学生,那么每个班级都会有3个名字被选中,用于学校的清洁工作。这种方法保证了每个班级的公平性和随机性,避免了人工干预导致的不公。

    oracle 数据库sql 语句面试题,北京一家软件公司的面试题,难度中等

    给出两个表`T1`和`T2`,每个表都只包含一个字段`ID`(整数类型)。`T1`中有4条记录:1,2,3,4;`T2`中有3条记录:2,4,5。 **题目解析:** 1. **执行后的结果:** 给定SQL语句为:`SELECT T1.ID, T2.ID FROM ...

    SQL语句教程-基础

    例如,“SELECT store_name, SUM(sales) FROM Store_Information GROUP BY store_name”,将按店名分组并计算每个店的总销售额。 10. HAVING子句用于过滤GROUP BY的结果集,它与WHERE子句类似,但HAVING可以使用...

    高职学院数据库原理教学探讨——如何用SQL语句实现关系代数的运算.pdf

    例如,教师可以给出一系列的关系代数表达式,让学生们尝试用SQL语句来表达相同的操作。通过这样的练习,学生不仅能够加深对关系代数运算逻辑的理解,还能提高使用SQL语言进行数据库操作的能力。 同时,为了更好地...

    SQL Server中选出指定范围行的SQL语句代码

    在SQL Server中,选择指定范围行的SQL语句通常是用于数据分页查询或者特定行的提取,这在处理大量数据时非常有用。由于标准的SQL语法并不直接支持直接选取特定行号的记录,我们需要采取一些策略来实现这个功能。下面...

    精妙SQL语句(让你意想不到)

    以下是一些关于SQL语句的精彩示例及其详细解释: 1. **复制表的结构而不复制数据** ```sql SELECT * INTO b FROM a WHERE 1<>1 ``` 这个语句用于创建一个新表b,其结构与表a相同,但不包含任何数据。`WHERE 1<>...

    SQL查询语句大全[汇编].pdf

    结合`SC`和`Course`表,计算每个学生的总学分,筛选学分小于10的记录: ```sql SELECT Student.Sname FROM Student, SC, Course WHERE Student.Sno = SC.Sno AND SC.cno = Course.cno GROUP BY Student....

    几个T-Sql 的面试题

    `GROUP BY`子句用于按照`学号`, `姓名`, `课程编号`, `课程名`, 和`分数`分组,而`MIN(自动编号)`则用来选出每个分组中自动编号最小的记录。 2. **主查询**: ```sql DELETE FROM Exam WHERE 自动编号 NOT IN (子...

    SQL查询语句——SELECT的使用技巧.pdf

    它是SQL语言中最为重要的语句之一,几乎每个数据库操作都会涉及到它。通过SELECT语句,用户能够指定想要从数据库中检索的数据列、行和其他相关条件。 ### SELECT语句的组成 SELECT语句的主要子句包括:ALL(或...

Global site tag (gtag.js) - Google Analytics