2014-06-11 60 views
0

如何从计数的数量中获得运行总数?SQL运行总数从一个计数

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 
+0

什么DB引擎你用? –

+0

Microsoft SQL Server管理工作室 – nadG

+0

而你正在得到的错误? – Ambrish

回答

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

0

你得到这个错误,因为TotalPerHOur我尚未定义。你正在用它来计算TotalCumulative

以下查询应该工作:

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

downvote的原因是? – Ambrish

+1

尝试使用此代码时出现无效的语法错误 – nadG

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 
0

通常,数据库应优化此查询,所以它不应该是一个问题来算两次:

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