在SQL Server中,我有一个名为credit_hours的表。该表有字段College和Sum_Credit_Hours,我想计算每个“Sum_Credit_Hours”值的百分比,因为它与所有信用小时的总和相关。我怎样才能做到这一点?
示例数据:
College Credit_hours
------------ ------------
Liberal arts 2253.2
Social Work 442.2
Nursing 223.65
Nursing 2
预期结果:
College Credit_hours Percentage
------------ ------------ ----------
Liberal Arts 2253.2 77
Social Work 442.2 16
Nursing 225.65 7
我目前有以下
SELECT College,
sum(credit_hours),
Percentage=( credit_hours / Sum(credit_hours)OVER() ) * 100
FROM Student_credit_hour_copy
然而,SQL服务器声明
列'Student_credit_hour_copy.COURSE_COLLEGE_NEW'无效 选择列表,因为它不包含在聚合中 函数或GROUP BY子句。
这很奇怪,因为它在aggregate
中使用了两个select
函数。
答案 0 :(得分:1)
使用Sum() Over()
窗口函数查找所有credithours
的总和,并将每个credithours
除以总和以找到percentage
SELECT college,
credit_hours,
Percentage=( credit_hours / Sum(Credit_hours)OVER() ) * 100
FROM (SELECT college,
Sum(credit_hours) credit_hours
FROM Yourtable
GROUP BY college) a
答案 1 :(得分:0)
对于确切的代码,我们需要查看您的数据结构是什么样的。 但是如果你有一个给你总和的查询,那么它与avg在同一个地方的查询是相同的。你可能不得不绕过它。
所以,像,
Select sum(column1) Total_Column1, avg(column1) Average_Column1
from table_name
Group by PK_Column