【问题标题】:Nesting of SQL COUNT and COUNT DISTINCT ... in other words, how do I nest or COUNTSQL COUNT 和 COUNT DISTINCT 的嵌套...换句话说,我如何嵌套或 COUNT
【发布时间】:2016-02-19 07:42:44
【问题描述】:

**这是针对 SQL2010 的

试图找出有多少学生参加了每个 PGM(即程序)

需要生成一个包含 5 列的报告

  1. 程序名称
  2. 节目计数
  3. 节目排名
  4. 学生人数
  5. 学生排名

结果

PGM/节目 COUNT 没问题。

PGM排名也是如此

但学生人数和学生排名为 1。

他们每个人都是“1”。 :(

我想我需要在 SELECT 中进行 SELECT(或者我不太了解 SQL)

SELECT TOP 100
       T.PGM AS Program, 
       COUNT(*) AS ProgramCount,
       RANK() OVER (ORDER BY COUNT(*) DESC) as ProgramRanking,
       T.SID AS 'StudentID', 
       COUNT(DISTINCT 'StudentID') AS ProgramCount,
       RANK() OVER (ORDER BY COUNT(DISTINCT 'StudentID') DESC) as StudentRanking

FROM StudentPrograms T
WHERE T.PGM <>'unknown' AND
      T.CreateDate > '2015-10-01' AND
      T.CreateDate < '2015-11-01'  -- We do LIKE Halloween :)
GROUP BY  T.PGM
ORDER BY COUNT(*) DESC;

再次感谢您

【问题讨论】:

  • 你能分享表格中的列吗,也请分享几个示例行。
  • 从您的查询中删除这一行“T.SID AS 'StudentID'”,然后依靠 t.sid 而不是 'StudentID'
  • 谢谢我试过 t.SID 而不是 StudentID,这就是我得到的
  • Program=ENG101, PGMCount=1629, ProgramRanking=1, StudentCount=1, Student Rank=1
  • BIO101、CHEM102 等也是如此……我得到了正确的 PGM 计数,但没有得到参加课程的学生的计数。请注意,我的原始问题中有一个可变错字,但我在我的真实 SQL 中修复了它。再次感谢您(我不确定为什么我不能在此编辑器中使用回车:()。再次感谢

标签: sql sql-server select count rank


【解决方案1】:

将您的查询更改为:

SELECT 
 T.PGM AS Program, 
 COUNT(*) AS ProgramCount, 
 RANK() OVER (ORDER BY COUNT(*) DESC) as ProgramRanking, 
 COUNT(DISTINCT t.sid) AS ProgramCount, 
 RANK() OVER (ORDER BY COUNT(DISTINCT t.sid) DESC) as StudentRanking
FROM StudentPrograms T
WHERE T.PGM <>'unknown' AND
      T.CreateDate > '2015-10-01' AND
      T.CreateDate < '2015-11-01'  -- We do LIKE Halloween :)
GROUP BY  T.PGM
ORDER BY COUNT(*) DESC;

【讨论】:

    猜你喜欢
    • 2012-08-13
    • 1970-01-01
    • 2011-08-15
    • 1970-01-01
    • 1970-01-01
    • 2021-05-03
    • 2017-11-19
    • 2020-11-12
    • 1970-01-01
    相关资源
    最近更新 更多