![](/img/trans.png)
[英]Neglect multiple records in SQL Server based on condition and produce result
[英]SQL Server - Exclude records from query result set based on condition
使用下面的查詢,我試圖獲得每個部門的 FTE 學生平均人數,每個部門的學生總數除以該部門的 FTE 學生總數。
在少數部門中不會有 FTE 學生,為此我使用案例陳述將平均值視為 0 在這種情況下沒有 FTE 學生(CASE U.[IsFTEStudent] WHEN 1 THEN 1 END)=0 THEN 0
SELECT D.[DepartmentId],
CASE WHEN COUNT(CASE U.[IsFTEStudent] WHEN 1 THEN 1 END)=0 THEN 0
ELSE COUNT(S.[StudentId])/COUNT(CASE U.[IsFTEStudent] WHEN 1 THEN 1 END) END AS 'AverageOfFTEStudents'
FROM dbo.[Student] S
INNER JOIN [dbo].User U
ON S.[StudentId] = U.[UserId]
INNER JOIN dbo.[Department] D
ON D.DepartmentId = S.[DepartmentId]
WHERE D.CollegeId = 5
GROUP BY S.DepartmentId
上面的查詢給出了平均為 0 的結果,現在我想排除那些 FTE 學生平均為 0 的部門,這意味着沒有 FTE 學生。
簡而言之,我的結果中應排除“AverageOfFTEStudents”為 0 的部門
我想你想要一個having
子句; 您可以使用AVG()
簡化計算邏輯:
SELECT S.[DepartmentId],
AVG(CASE WHEN [IsFTEStudent] = 1 THEN 1.0 ELSE 0 END) AS [AverageOfFTEStudents]
FROM dbo.[Student] S
INNER JOIN [dbo].User U ON ON S.[StudentId] = U.[UserId]
INNER JOIN dbo.[Department] D ON D.DepartmentId = S.[DepartmentId]
WHERE D.CollegeId = 5
GROUP BY S.DepartmentId
HAVING SUM(CASE WHEN [IsFTEStudent] = 1 THEN 1 ELSE 0 END) > 0
根據IsFTEStudent
的實際數據類型和值,我們或許可以稍微簡化聚合表達式。 例如,如果它是一個 integer 和0
/ 1
值,那么:
SELECT S.[DepartmentId],
AVG([IsFTEStudent] * 1.0) AS [AverageOfFTEStudents]
FROM dbo.[Student] S
INNER JOIN [dbo].User U ON ON S.[StudentId] = U.[UserId]
INNER JOIN dbo.[Department] D ON D.DepartmentId = S.[DepartmentId]
WHERE D.CollegeId = 5
GROUP BY S.DepartmentId
HAVING SUM([IsFTEStudent]) > 0
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.