如何编写sql以在postgres的最后一行显示总金额

问题描述 投票:0回答:2

如何在 postgres 中编写一条 SQL 来列出详细信息然后列出总金额,如下所示?

项目 销售总额
1001 10000
1002 20000
1003 5000
1004 2000
总计: 30700
postgresql
2个回答
3
投票

您可以在

ROLLUP()
中使用
GROUP BY
:

SELECT item, sum(totalamtsold) FROM yourtable GROUP BY ROLLUP(item)

0
投票

处理有多个列但希望有单个 SUM 行的情况,即仅显示总计而不显示小计。

解决方案:

select 
  coalesce(col_1, 'Total') as col_1,
  coalesce(col_2, 'Total') as col_2,
  sum(sales) as total_sales
from my_table
  group by rollup(col_1, col_2)
  having grouping(col_1) = grouping(col_2)
  order by (col_1, col_2);

说明:

函数

grouping(column)
对于普通行返回
1
,对于汇总行返回
0

条件

grouping(col_1) = grouping(col_2)
确保结果集仅包含正常行或总计行,但不包含小计。

为了更好地理解它是如何工作的,请在不带条件且带有辅助列的情况下运行命令:

select 
  coalesce(col_1, 'Total') as col_1,
  coalesce(col_2, 'Total') as col_2,
  sum(sales) as total_sales,
  grouping(col_1) as grouping_col_1,
  grouping(col_2) as grouping_col_2
from my_table
  group by rollup(col_1, col_2)
  order by (col_1, col_2);
© www.soinside.com 2019 - 2024. All rights reserved.