【问题标题】:How to get the three most common foreign keys from a table in a T-SQL procedure如何从 T-SQL 过程中的表中获取三个最常见的外键
【发布时间】:2018-10-13 23:36:58
【问题描述】:

我的 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
)

【问题讨论】:

    标签: sql sql-server database stored-procedures


    【解决方案1】:

    一种方法是:

    select aid
    from (select aid,  rank() over (order by count(*) desc) as seqnum
          from Problem
          group by aid
         ) a
    where seqnum <= 3;
    

    这演示了窗口函数与聚合函数的结合。

    【讨论】:

      【解决方案2】:

      当然这不是存储过程,这只是查询,但这可能是你需要的吗?

      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;
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-11-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-10-02
        • 1970-01-01
        • 2011-05-13
        • 1970-01-01
        相关资源
        最近更新 更多