You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用MSSQL查询Rahul两学期均位列前三的高分科目?

MSSQL解决Term-1和Term-2前三高分共同科目查询问题

问题原因

你写的代码报错是因为MSSQL里INTERSECT这类集合运算的左右子查询不能直接带ORDER BY——ORDER BY默认是用来排序最终输出结果的,不能单独作用于集合运算前的单个查询。但我们又必须先按分数降序排序才能取到真正的前三高分科目,所以得把“排序取TOP 3”的逻辑用子查询或CTE包裹起来,让数据库先执行这部分,再做交集运算。

正确写法1:子查询包裹

SELECT subject
FROM (
    SELECT TOP 3 subject
    FROM RESULT
    WHERE exam = 'Term_1'
    ORDER BY marks DESC
) AS Term1Top3
INTERSECT
SELECT subject
FROM (
    SELECT TOP 3 subject
    FROM RESULT
    WHERE exam = 'Term_2'
    ORDER BY marks DESC
) AS Term2Top3

正确写法2:CTE(可读性更高)

WITH Term1Top3 AS (
    SELECT TOP 3 subject
    FROM RESULT
    WHERE exam = 'Term_1'
    ORDER BY marks DESC
),
Term2Top3 AS (
    SELECT TOP 3 subject
    FROM RESULT
    WHERE exam = 'Term_2'
    ORDER BY marks DESC
)
SELECT subject
FROM Term1Top3
INTERSECT
SELECT subject
FROM Term2Top3

这两种写法都会先分别筛选出Term-1、Term-2按分数降序排列的前三科目,再通过INTERSECT找出同时出现在两个列表里的科目,完全符合需求。

内容的提问来源于stack exchange,提问作者rereer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 15:52:18