SQL从计数中运行总计

时间:2014-06-11 08:14:34

标签: sql sql-server

如何从按计算计算的数量中获得运行总计?

select Hour, count(*) TotalPerHOur, sum(TotalPerHOur) TotalCumulative
from table1
group by Year, Month, Day, Hour

这是我的查询 - 但不起作用...... 我得到的错误是

  

无效的列TotalPerHOur

结果表的示例

HOUR    Total_per_Hour Total Cumulative
6:00-7:00   8                     8
7:00-8:00   13                    21
8:00-9:00   20                    41
9:00-10:00  22                    63
10:00-11:00 10                    73
11:00-12:00 23                    96

4 个答案:

答案 0 :(得分:0)

您收到此错误是因为尚未定义TotalPerHOur。并且您正在使用它来计算TotalCumulative

以下查询应该有效:

SELECT 
    Hour, 
    TotalPerHOur, 
    sum(TotalPerHOur) TotalCumulative
FROM (
    SELECT 
        Hour, 
        count(*) TotalPerHOur
    FROM 
        table1 
    GROUP BY 
        Year, 
        Month, 
        Day, 
        Hour
)

答案 1 :(得分:0)

尝试这样的事情:

SELECT t1.Hour, count(*) TotalPerHOur, (
  SELECT count(*) 
  FROM table1 t2
  WHERE t2.Year <= t1.Year and t2.Month <= t1.Month and t2.Day <= t1.Day and t2.Hour <= t1.Hour
) TotalCumulative
FROM table1 t1
GROUP BY t1.Year, t1.Month, t1.Day, t1.Hour

SQL Fiddle

答案 2 :(得分:0)

以下查询将生成运行总计;

    WITH Base AS
    (
        SELECT ROW_NUMBER() OVER (ORDER BY Year, Month, Day, Hour) RowNum,
    Year, Month, Day, Hour, count(*) as CountPerHour, sum(Total) as TotalPerHour FROM table1 group by Year, Month, Day, Hour
    )
    select T1.Year, T1.Month, T1.Day, T1.Hour, T1.CountPerHour, sum(T2.TotalPerHour) from BASE as T1
    join BASE as T2 on T2.RowNum <= T1.RowNum
    Group by T1.Year, T1.Month, T1.Day, T1.Hour, T1.CountPerHour

答案 3 :(得分:0)

通常,数据库应优化此查询,因此计算两次不应该是一个问题:

select Hour, count(*) TotalPerHOur, sum(count(*)) TotalCumulative
from table1
group by Year, Month, Day, Hour