sql查询查找最常出现的级别

par*_*isa 2 sql sql-server

Student在SQL Server中有一个包含以下列的表:

[ID], [Age], [Level] 
Run Code Online (Sandbox Code Playgroud)

我想要返回显示的每个年龄值的查询Students,并找到最常出现的级别值.例如,如果'a'18岁以上的学生比"b"或"c"更多,则应打印该对(18, a).

我是SQL Server的新手,我想要一个嵌套查询的简单答案.

Gor*_*off 5

您可以使用窗口函数执行此操作:

select t.*
from (select age, level, count(*) as cnt,
             row_number() over (partition by age order by count(*) desc) as seqnum
      from student s
      group by age, level
     ) t
where seqnum = 1;
Run Code Online (Sandbox Code Playgroud)

内部查询聚合数据以计算每个年龄的级别数.在row_number()每个年龄段枚举这些(在partition by与最大的第一).where然后该条款选择最高值.

在tie的情况下,这只返回其中一个值.如果你想要所有这些,请使用rank()而不是row_number().