0

我有一个包含一些数据的表说

====================
Record  | Record_Count
1       |   12
3       |   87
5       |   43
6       |   54
1       |   43
3       |   32
5       |   65
6       |   43

我有一个查询返回按记录分组的记录计数总和

select record,sum(record_count)
FROM table_name
WHERE <conditions>
GROUP BY tcpa_code
ORDER BY sum(record_count)

结果是这样的

====================
Record  | Record_Count
1       |   55
3       |   119
5       |   108
6       |   97

现在我还想要一个总计记录计数(所有记录计数的总和)。

问题是我也想要上述结果集以及总计。

我试过这个

select sum(subquery.record_count)
from (
select record,sum(record_count)
FROM table_name
WHERE <conditions>
GROUP BY tcpa_code
ORDER BY sum(record_count) ) as subquery

但是通过使用它,我失去了个人的 record_count 总和。

所以我的问题是,我能否在单个查询中实现包含每条记录的 record_count 总和和 record_count 总计的结果集?

4

3 回答 3

0

您可以使用union来实现您所需要的:

(select cast(record as varchar(16)) record,sum(record_count) from schema.table
group by 1)
union
(select 'Grand_Total' as record,sum(record_count) from schema.table
group by 1);

在这里检查 - SQL Fiddle


如果您的数据库支持group by ... with rollup,您还可以使用:

select ifnull(record,'Grand Total')record,sum(record_count) total_count
from schema.table
group by record asc with rollup

在这里检查 - SQL Fiddle

于 2018-01-31T11:43:36.170 回答
0

为了节省一些输入,可以使用公用表表达式(cte):

with cte as
(
    select record, sum(record_count) rsum
    FROM table_name
    WHERE <conditions>
    GROUP BY record
)
select record, rsum from cte
union all
select 'Grand_Total', sum(rsum) from cte
于 2018-01-31T12:56:03.950 回答
0

你应该使用PostgrSQL 的windows 函数

至于这个查询,

SELECT record, record_count, sum(record_count) OVER()
    FROM (
         SELECT record, sum(record_count) record_count
           FROM table_name
           WHERE <conditions>
           GROUP BY tcpa_code
           ORDER BY sum(record_count) 
          ) as subquery
于 2018-01-31T15:31:57.667 回答