我的DBMS教授希望我编写一个SQL过程,该过程检查输入的作者ID是否是问题表中三个最常见的作者之一。在Author
表中,从事最多问题(至少是前三个问题)的作者的薪水提高了。
Problem
表中的每个条目都有一个AuthorID
作为外键。我需要计算与每个作者相关的问题的数量,并按顺序列出它们,以便检查作为参数传递到过程中的AuthorID
是否为已计数列表中前三项之一。>
找到该列表不是问题。还有很多其他问题,说明如何使用GROUP BY
,ORDER BY
和COUNT()
来查找最高作者列表。问题是SQL Server似乎不希望我从GROUP BY
创建的表中选择信息。
在那之后我可以使用if-then语句。
问题表如下
CREATE TABLE Problem
(
pid int,
pname varchar(255),
max_score int,
aid int
)
答案 0 :(得分:0)
这当然不是存储过程,这只是查询,但是这可能就是您所需要的吗?
select aid from (
select aid, rank() over(order by cnt desc) rnk from (
select aid, count(*) cnt
from Problem
group by aid
) t
) tt
where rnk <= 3;
答案 1 :(得分:0)
一种方法是:
select aid
from (select aid, rank() over (order by count(*) desc) as seqnum
from Problem
group by aid
) a
where seqnum <= 3;
这演示了将窗口函数与聚合函数结合在一起。