选择具有元素最小值的行(如果表中存在单行/多行)

时间:2018-06-22 19:02:44

标签: mysql sql subquery greatest-n-per-group min

样品表-

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
  1. 不同优先级不能具有相同的值,而与subj_code字段无关。 即。下表是不可能的-

    rollno | subj_code |优先 1 | c45 | 0 1 | b68 | 0

  2. 多个行可以具有相同的priority,但在这种情况下rollno需要不同。

  3. 在这种情况下,查询会给出正确的结果-

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

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

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

1 个答案:

答案 0 :(得分:0)

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