首页 > 解决方案 > 使用 SQL,我可以在分组时在一个表中显示总和和部分总和吗?

问题描述

我正在尝试设置一个包含 date_trunc、部分总和和总和的表。这是我的清单:(仅供参考,日期为 mm/dd/yyyy 格式)

original_table 列是...

my_date | task_name
01/01/2019 | task 1
01/02/2019 | task 2
01/05/2019 | task 3
02/01/2019 | task 4
02/05/2019 | task 5
03/01/2019 | task 6
03/04/2019 | task 7
03/07/2019 | task 8
03/09/2019 | task 9
...

我希望它看起来像下面这样:

group_month | sub_total | total
jan         | 3         | 9
feb         | 2         | 9
mar         | 4         | 9

我只能通过使用 2 个表来做到这一点,我想知道是否可以用 1 个表来做到这一点。

WITH total_table AS(
  SELECT 
    count(task_name) AS total_task
  FROM original_table
)
SELECT
   DATE_TRUNC('month',my_date) AS group_month,
   count(task_name) AS sub_total,
   total_task
FROM origianl_table, total_table
GROUP BY group_month

标签: postgresql

解决方案


您可以使用以下 SQL:

select distinct extract('month' from my_date) mon_name,
count(*) over (partition by extract('month' from my_date)) sub_count,
count(*) over () total_count
from your_table

演示


推荐阅读