2012-10-24 117 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