如何在 postgres 中编写一条 SQL 来列出详细信息然后列出总金额,如下所示?
项目 | 销售总额 |
---|---|
1001 | 10000 |
1002 | 20000 |
1003 | 5000 |
1004 | 2000 |
总计: | 30700 |
您可以在
ROLLUP()
中使用 GROUP BY
:
SELECT item, sum(totalamtsold) FROM yourtable GROUP BY ROLLUP(item)
处理有多个列但希望有单个 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);