我Student在SQL Server中有一个包含以下列的表:
[ID], [Age], [Level]
Run Code Online (Sandbox Code Playgroud)
我想要返回显示的每个年龄值的查询Students,并找到最常出现的级别值.例如,如果'a'18岁以上的学生比"b"或"c"更多,则应打印该对(18, a).
我是SQL Server的新手,我想要一个嵌套查询的简单答案.
您可以使用窗口函数执行此操作:
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().