如何在T-SQL过程中从表中获取三个最常见的外键

时间:2018-10-13 23:36:59

标签: sql sql-server database stored-procedures

我的DBMS教授希望我编写一个SQL过程,该过程检查输入的作者ID是否是问题表中三个最常见的作者之一。在Author表中,从事最多问题(至少是前三个问题)的作者的薪水提高了。

Problem表中的每个条目都有一个AuthorID作为外键。我需要计算与每个作者相关的问题的数量,并按顺序列出它们,以便检查作为参数传递到过程中的AuthorID是否为已计数列表中前三项之一。

找到该列表不是问题。还有很多其他问题,说明如何使用GROUP BYORDER BYCOUNT()来查找最高作者列表。问题是SQL Server似乎不希望我从GROUP BY创建的表中选择信息。

在那之后我可以使用if-then语句。

问题表如下

CREATE TABLE Problem
(
    pid int,
    pname varchar(255),
    max_score int,
    aid int
)

2 个答案:

答案 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;

这演示了将窗口函数与聚合函数结合在一起。