【问题标题】:SubSelects for Order and Count订单和计数的子选择
【发布时间】:2015-11-18 23:48:38
【问题描述】:

我有一个这样的选择:

SELECT Faculty,Department,Season,Student,Score FROM Table

我想要两个这样的新列:

NumberInSeason 是该学院、系和赛季的分数顺序。

TotalInSeason 是该学院、部门和季节的学生人数。

我认为我需要子选择,但现在无法弄清楚。有什么帮助吗?

【问题讨论】:

  • 当您使用 sqlServer2012 时,您拥有窗口功能。有关枚举 (NumberInSeason),请参见 Row_Number()。还有我认为是 TotalInSeason 的 NTile。

标签: sql tsql sql-server-2012 subquery


【解决方案1】:

窗口函数应该完成任务:

SELECT 
  Faculty, 
  Department, 
  Season, 
  Student, 
  Score, 
  DENSE_RANK() OVER (PARTITION BY Faculty, Department, Season ORDER BY Score DESC) AS NumberInSeason, 
  COUNT(*) OVER (PARTITION BY Faculty, Department, Season) AS TotalInSeason 
FROM Table

【讨论】:

  • 像魅力一样工作。谢谢。
【解决方案2】:

试试这个(未测试)

SELECT  a.Faculty,a.Department,a.Season,a.Student,Score,count(b.*)  as NumberInSeason , 
SELECT (count(*) FROM table c ON c.Faculty=a.Faculty AND c.Department=a.Department,c.Season=a.Season) AS TotalInSeason 
FROM Table a
LEFT JOIN Table b ON a.Faculty=b.Faculty and a.Department=b.Department and a.Season=b.Season and a.score<=b.score
group by a.Faculty,a.Department,a.Season,a.Student,a.Score

【讨论】:

    猜你喜欢
    • 2017-10-14
    • 1970-01-01
    • 2013-08-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-17
    • 1970-01-01
    相关资源
    最近更新 更多