求sql查询,找出每门功课成绩最高的学生

问题描述

求sql查询,找出每门功课成绩最高的学生

一个表格有三列:名字、科目、成绩, 科目中有四门功课,怎么设计查询找出每门功课中成绩 最高的那条信息
想到用group by 可是只能查询功课中最高的成绩,不能显示姓名

解决方案

select * from 表 where 成绩 in (select max(成绩) in 表 group by 成绩)

解决方案二:

declare @名字 nchar(10),@成绩 smallint

select @名字=名字,@成绩=max(成绩) from 表 group by 名字

select * from 表
where 表.名字 = @名字 and 表.成绩 =@成绩

解决方案三:

select a.名字,a.科目,a.成绩 from 表2 a inner join
(select 名字,max(成绩)as 成绩 from 表2 group by 名字) b
on a.名字 = b.名字 and a.成绩= b.成绩

解决方案四:

select * from 表 where 成绩 in (select max(成绩) in 表 group by 科目)

解决方案五:

select * from 表 where 科目+convert(char(5),成绩) in (select 科目+convert(char(5)+max(成绩)) in 表 group by 科目)

解决方案六:

select * from (select 名字, 科目, 成绩, rank() over(partition by 科目 order by 成绩 desc) ranking from 表) where ranking = 1;

解决方案七:

感谢大家献策啊,呃,这个表……我想起head in first中的一句话,设计糟糕的表应当重新设计,而不应该迁就于更复杂的查询。

时间: 2024-09-14 08:20:45

求sql查询,找出每门功课成绩最高的学生的相关文章

图片-qiushou求SQL查询语句问题, SQL语句忘记怎么写了

问题描述 qiushou求SQL查询语句问题, SQL语句忘记怎么写了 第一列是-主键-地区-销售人员-销售总额, 请问查询-每个地区销售金额最少的人是谁 解决方案 select * from ( select rank() over(partition by region order by total) as rid ,orderid,region,sales,total from salesorder ) t where t.rid = 1 解决方案二: select * from sale

求SQL查询语句

问题描述 我想求出这样的结果,同一张单据(id相同为同一张)利润unitCost*inQuantity-unitCost*outQuantity最后的结果期望是这样的sn id pricesDB-20111129-61644 1042 50DB-20111129-81334 1043 -400原记录与附件中的图片一样谢谢! 问题补充:huoyj 写道 解决方案 select sn,id, sum(unitCost*inQuantity-unitCost*outQuantity) prices f

求SQL 查询中截取特定字符串,动态索引方法

问题描述 SQL数据库中现有类似以下数据:router16960761696076,1712040,1720394,1714275,1712018,17119841696076,1712040,1720394,1714275,1712018,1711984,1726235,1712000我需要截取特定的字符(比如最后两个逗号直接的值:1712018,倒数第二个逗号到倒数第三个逗号直接的值),希望论坛大神帮忙指点一下,能有个详细的函数最好.谢谢.补充一下,数值位数有可能是7位,有可能是8位,所以不

如何找出你性能最差的SQL Server查询

原文:如何找出你性能最差的SQL Server查询 我经常会被反复问到这样的问题:"我有一个性能很差的SQL Server.我如何找出最差性能的查询?".因此在今天的文章里一些让你很容易找到问题答案的信息和向导. 问SQL Server! SQL Server的一个优点是它本身能回答几乎所有你的问题,因为SQL Server在各个DMV和DMF里存储了很多故障排除信息.另一方面这也是个缺点,因为你必须知道各个DMV/DMF,还有如何把它们解释和关联在一起. 至于你的最差性能SQL Se

MySQL中用通用查询日志找出查询次数最多的语句的教程_Mysql

MySQL开启通用查询日志general log mysql打开general log之后,所有的查询语句都可以在general log文件中以可读的方式得到,但是这样general log文件会非常大,所以默认都是关闭的.有的时候为了查错等原因,还是需要暂时打开general log的(本次测试只修改在内存中的参数值,不设置参数文件). general_log支持动态修改: mysql> select version(); +-----------+ | version() | +------

标准SQL查询 总结练习

1.按照部门的编号,分组,求出每个部门的平均薪水?最高薪水? 实现:SQL>select deptno,avg(sal) from emp group by deptno;    DEPTNO   AVG(SAL) ---------- ----------        10 2916.66667        20     2012.5        30 1562.85714 SQL> select deptno,max(sal) from empgroup by deptno;    

【sql查询与优化】3.操作多个表

注:以下所有sql案例均取自"oracle查询优化改写技巧与案例"丛书. EMP表的详细: 查询所有信息, SQL> select * from emp;      EMPNO ENAME                JOB                       MGR HIREDATE       SAL        COMM       DEPTNO ---------- -------------------- ------------------ -------

sql-SQL如何实现找出与自己关联最顶层的信息

问题描述 SQL如何实现找出与自己关联最顶层的信息 如上图,表一(上表)是原始数据,通过此数据如何查找出表二(下表)的数据(Fid1最底层,找出Fid2最顶层的信息),如d1.d2.c1是Fid1的最底层信息,对应的Fid2的最顶层信息都是a2, 如何通过SQL实现?? 以上是固定的只有几层,但是C1下可能还存在很多下层信息,如下....H1--G1--F1--C1 ,这个时候又如何用SQL实现找出最顶层信息 解决方案 http://zhidao.baidu.com/link?url=hbcIF

如何找出引起ORA-1652的SQL

在alert文件中,我们可能会看到这样的报错信息: Wed Aug 20 17:16:37 2008 ORA-1652: unable to extend temp segment by 128 in tablespace DBA_TEMP 要解决这个问题,我们首先要导致这个问题的SQL,可能方法有几种: 1.设置events alter system set events '1652 trace name errorstack level 1'; 这种方法有一定局限: 1)它不能获取已发生的1