如何查询值的百分比与所有值的总和?

时间:2015-01-23 15:39:18

标签: sql sql-server

在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函数。

2 个答案:

答案 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 

SQLFIDDLE DEMO

答案 1 :(得分:0)

对于确切的代码,我们需要查看您的数据结构是什么样的。 但是如果你有一个给你总和的查询,那么它与avg在同一个地方的查询是相同的。你可能不得不绕过它。

所以,像,

Select sum(column1) Total_Column1, avg(column1) Average_Column1
from table_name
Group by PK_Column