获得用户总和的总和

时间:2018-02-21 22:37:04

标签: sql sql-server

SQL表:

UserId ReportsRead
  1        4
  2        6
  3        5

我想查询该表,以便我可以得到以下内容:

UserId ReportsRead TotalReports
   1       4           15

问题是因为我应用了WHERE子句,所得到的总和将与用户报告读取的相同。

SELECT UserId, ReportsRead, SUM(ReportsRead) AS TotalReports FROM MyTable WHERE UserId = 1

是否有内置功能可以让我这样做?我想完全避免使用子查询。

2 个答案:

答案 0 :(得分:1)

使用sum窗口功能。

SELECT UserId, ReportsRead, SUM(ReportsRead) OVER() AS TotalReports 
FROM MyTable

使用过滤条件获取特定的userId,如

SELECT * 
FROM (SELECT UserId, ReportsRead, SUM(ReportsRead) OVER() AS TotalReports 
      FROM MyTable
     ) t
WHERE UserId=1

答案 1 :(得分:1)

在这种情况下我通常不建议使用子查询,但在这种情况下,它似乎是一种简单的方法:

SELECT UserId, ReportsRead,
       (SELECT SUM(ReportsRead) from MyTable) AS TotalReports
FROM MyTable
WHERE UserId = 1;

如果您想要所有用户的行,那么窗口函数就可以了:

select t.*, sum(reportsread) over () as totalreports
from mytable;

但是,您不能包含where条款,但仍希望获得正确的总数。