首页 > 解决方案 > 选择元素最小值的行(如果表中存在单行/多行)

问题描述

样品表 -

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

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

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

但在我的表中,可能只有一个 a 条目,rollno这意味着只有一行和priority(如rollno= 2 的情况),在这种情况下,上述查询不会subj_code返回。在这种情况下如何获得subj_code回报?

笔记 -

  1. 无论字段如何,特定的不同优先级rollno不能具有相同的值。subj_codeIE。下表是不可能的 -

    罗诺 | 主题代码 | 优先级 1 | c45 | 0 1 | b68 | 0

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

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

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

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

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

标签: mysqlsqlsubquerygreatest-n-per-groupmin

解决方案


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

推荐阅读