2012-10-24 62 views
1

是否有一个函数计算像下面这样的完整月的总计数?我不确定是否postgres。我正在寻找总价值。函数计算postgresql中的总计数

2012-08=# select date_trunc('day', time), count(distinct column) from table_name group by 1 order by 1; 

    date_trunc  | count 
---------------------+------- 
2012-08-01 00:00:00 | 22 
2012-08-02 00:00:00 | 34 
2012-08-03 00:00:00 | 25 
2012-08-04 00:00:00 | 30 
2012-08-05 00:00:00 | 27 
2012-08-06 00:00:00 | 31 
2012-08-07 00:00:00 | 23 
2012-08-08 00:00:00 | 28 
2012-08-09 00:00:00 | 28 
2012-08-10 00:00:00 | 28 
2012-08-11 00:00:00 | 24 
2012-08-12 00:00:00 | 36 
2012-08-13 00:00:00 | 28 
2012-08-14 00:00:00 | 23 
2012-08-15 00:00:00 | 23 
2012-08-16 00:00:00 | 30 
2012-08-17 00:00:00 | 20 
2012-08-18 00:00:00 | 30 
2012-08-19 00:00:00 | 20 
2012-08-20 00:00:00 | 24 
2012-08-21 00:00:00 | 20 
2012-08-22 00:00:00 | 17 
2012-08-23 00:00:00 | 23 
2012-08-24 00:00:00 | 25 
2012-08-25 00:00:00 | 35 
2012-08-26 00:00:00 | 18 
2012-08-27 00:00:00 | 16 
2012-08-28 00:00:00 | 11 
2012-08-29 00:00:00 | 22 
2012-08-30 00:00:00 | 26 
2012-08-31 00:00:00 | 17 
(31 rows) 
-------------------------------- 
     Total   | 12345 
+0

努力去理解你的意思。你不是在寻找'group by date_trunc('month',time)'? –

+0

我想获得小计,如果我做date_trunc('月',时间),我没有得到我想要的。我得到的数字较少。 – ronak

回答

4

尽我所能从您的问题和意见中猜出,您希望按月份计算不同计数的小计。你不能这样做,group by date_trunc('month',time),因为它会做count(distinct column)这是不同的所有天。

为此,您需要一个子查询或CTE:

WITH day_counts(day,day_col_count) AS (
    select date_trunc('day', time), count(distinct column) 
    from table_name group by 1 
) 
SELECT 'Day', day, day_col_count 
FROM day_counts 
UNION ALL 
SELECT 'Month', date_trunc('month', day), sum(day_col_count) 
FROM day_counts 
GROUP BY 2 
ORDER BY 2; 

我的评论之前更早的猜测是:集团通过一个月?

select date_trunc('month', time), count(distinct column) 
from table_name 
group by date_trunc('month', time) 
order by time 

或者你是否试图包含运行总计或小计行?对于运行总计,您需要使用sum作为窗口函数。小计只是一种痛苦,因为SQL并不真正把自己借给他们;您需要UNION两个查询,然后将它们包装在外部ORDER BY

+0

感谢克雷格,这有所帮助。我调整了查询​​来获得最后的总数。 – ronak

+0

@ronak很高兴为您提供帮助。今后,值得发布一些示例数据('CREATE TABLE'和'INSERT'语句),一些手工制作的示例预期输出和PostgreSQL版本,因为这样可以更容易地回答这样的问题。 –

+0

这是可能的子查询? – rogerdpack

1
select 
    date_trunc('day', time)::text as "date", 
    count(distinct column) as count 
from table_name 
group by 1 
union 
select 
    'Total', 
    count(distinct column) 
from table_name 
group by 1, date_trunc('month', time) 
order by "date" = 'Total', 1 
+0

这并没有给我正确的总数。我得到404而不是872,这正是我期望的。 – ronak