sql - 删除包含子查询的sql查询中的冗余

标签 sql azure subquery

假设我们有一个带有方案的表

student(id (primary key), name, math_score, english_score)

我正在尝试获取排名最高的学生信息(ID和姓名)(按数学分数和英语分数的最高总和排序)。可能有几个打领带的学生,我们想要他们全部。我想到的方法是使用子查询来获取一个包含分数总和的表,然后查找具有最高总和的 ids、名称。

SELECT s.id, s.name
FROM (SELECT s.id, s.name, s.math_score+s.english_score as sum
      FROM student s) s
WHERE s.sum = (SELECT max(s.sum)
               FROM (SELECT s.id, s.name, s.math_score+s.english_score as sum
                     FROM student s) s)

这可行,但看起来非常多余且效率不高。

我刚刚开始学习 sql 语言,希望对这个问题有一些见解!

最佳答案

与领带一起使用

create table #student(
    id int primary key identity(1,1), 
    name varchar(50), 
    math_score decimal, 
    english_score decimal
)

insert into #student
values
('Tom', 90, 90),
('Dick', 70, 70),
('Harry', 80, 100)

select TOP(1) WITH TIES
    id, 
    name, 
    math_score, 
    english_score, 
    math_score + english_score as ScoreRank
from #student
order by
    math_score + english_score desc

给出答案:

id|name|math_score|english_score|ScoreRank
1|Tom|90|90|180
3|Harry|80|100|180

关于sql - 删除包含子查询的sql查询中的冗余,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29782496/

相关文章:

java - Jooq (java) - 方言 DEFAULT 不支持类型类 org.jooq.impl.UnqualifiedName

asp.net - Azure 网站和 Azure 云服务之间的区别

mysql子查询返回多行

php - mySQL 在一个查询但三个表中使用复杂连接列出配置文件和电影

sql - 自定义处理以在 SQL 中将行转换为列

sql - 构建 INSERT 语句值的动态列表

wcf - 将 Azure 服务总线队列与 WCF 结合使用的优点

python - 在azure批处理节点中安装python包

MySQL 多级子查询

sql - Oracle SQL 语句动态模式变量