样品表-

rollno | subj_code | priority
1      | c45       | 0
1      | b68       | 1
1      | a98       | 2
2      | a98       | 0


我想选择一个最小值为priority的行,因为我正在使用以下查询,并且如果数据库中有多个行(如rollno = 1的情况),它的工作效果很好。

SELECT subj_code FROM priorities WHERE rollno = roll AND priority = (
    select min(priority) from priorities
)


但是在我的表中,rollno可能只有一个条目,这意味着只有一行和priority(例如rollno = 2的情况),在这种情况下,上面的查询没有给出subj_code作为回报。
在这种情况下如何获得subj_code作为回报?

注意 -


特定rollno的不同优先级不能具有相同的值,而与subj_code字段无关。
即。下表是不可能的-

rollno | subj_code |优先
1 | c45 | 0
1 | b68 | 0
多个行可以具有相同的priority,但是在这种情况下,rollno必须不同。
在这种情况下,查询会给出正确的结果-

从优先级中选择subj_code,其中rollno = 1 AND优先级=(
        从优先级中选择最小(优先级)
    )


但在这种情况下不给出结果-

SELECT subj_code FROM priorities WHERE rollno = 2 AND priority = (
        select min(priority) from priorities
    )

最佳答案

with minprior as(
Select rollno as 'roll'
,min(priority) as 'minpri'
FROM priorities
Group by rollno)

Select rollno
,subj_code
,priority
From priorities inner join minprior
on rollno = roll
and priority = minpri

10-04 16:06