PostgreSQL“嵌套”?与众不同

时间:2012-07-18 15:50:09

标签: sql postgresql count distinct postgresql-9.1

我需要在PostgreSQL 9.1

中的一个查询中获得每小时不同名称的计数

我的表格中的相关栏目(一般用于提问)是:

occurred timestamp with time zone and
name character varying(250) 

为了问题,表名只是table

occurred个时间戳将在一天内的午夜到午夜(独家)范围内。到目前为止,我的查询看起来像:

'SELECT COUNT(DISTINCT ON (name)) FROM table'

如果我可以将输出格式化为24个整数的列表(一天中每小时一个),那将是很好的,不需要返回名称。

3 个答案:

答案 0 :(得分:2)

SELECT date_trunc('hour', occurred) AS hour_slice
      ,count(DISTINCT name) AS name_ct
FROM   mytable
GROUP  BY 1
ORDER  BY 1;

DISTINCT ON是一个不同的功能。

date_trunc()为您提供每个不同时段的总和,而EXTRACT在较长时间内每小时的总和。两个结果不会加起来,因为总计多个count(DISTINCT x)等于或更高而不是一个count(DISTINCT x)

答案 1 :(得分:2)

如果我理解你想要什么,你可以写:

SELECT EXTRACT(HOUR FROM occurred),
       COUNT(DISTINCT name)
  FROM ...
 WHERE ...
 GROUP
    BY EXTRACT(HOUR FROM occurred)
 ORDER
    BY EXTRACT(HOUR FROM occurred)
;

答案 2 :(得分:1)

你想要这个小时:

select extract(hour from occurred) as hr, count(distinct name)
from table t
group by extract(hour from occurred)
order by 1

这假设只有一天的数据。否则,将结合不同日期的小时数。要解决这个问题,您还需要包含日期信息。