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
是否有内置功能可以让我这样做?我想完全避免使用子查询。
答案 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
条款,但仍希望获得正确的总数。