SQL Server中的RANK(),DENSE_RANK()和COUNT()

时间:2015-11-16 20:25:23

标签: sql count nested rank

我有一张在学院使用课程/ PGM的学生表。我想在一个月内知道前100名PGM:

  1. 程序/ PGM运行的次数(一个月内),
  2. PGM的排名,
  3. 总共有多少...唯一的SID ...学生ID运行了PGM,
  4. 独特学生人数排名
  5. 我在下面给出了这个MS SQL 2010代码...以找到前100个PGM /程序。我真的清理了我对嵌套SELECT,COUNT,COUNT DISTINCT,RANK等的黑客行为......相信我,我已经尝试过,从其他问题和答案中复制SQL。我希望不要制作一张临时桌子。我尝试的一切都是“没有快乐”。 :( 所以我想我会通过电子邮件发送给StackOverflow社区。任何帮助将不胜感激,并提前感谢您。

    SELECT TOP 100
        T.PGM AS 'Program'
        ,COUNT (*) AS 'Program Count'
    
    FROM StudentPrograms T
    
    WHERE 
        T.PGM <>'unknown'
        AND T.CreateDate > '10/01/2015'
        AND T.CreateDate < '10/31/2015'
    
     GROUP BY       
       T.PGM
    
    ORDER BY 
        COUNT(*) DESC
        ;
    

    我最终应该在表中添加5列

    1. 程序
    2. 节目计数
    3. 节目排名(将是1到100 ......我知道这很无聊......但现在还可以)
    4. 学生计数
    5. 学生排名(不会直接1到100但分散一点)

1 个答案:

答案 0 :(得分:0)

如果你想要排名,或许你想要rank()

SELECT TOP 100
       T.PGM AS Program, COUNT(*) AS ProgramCount,
       RANK() OVER (Order BY COUNT(*) DESC) as ranking
FROM StudentPrograms T
WHERE T.PGM <>'unknown' AND
      T.CreateDate > '2015-10-01' AND
      T.CreateDate < '2015-10-31'  -- We don't like Halloween
GROUP BY  T.PGM
ORDER BY COUNT(*) DESC;