2

PostgreSQL9.1の1つのクエリで1時間あたりの個別の名前の数を取得する必要があります

私のテーブルの関連する列(質問用に一般化されています)は次のとおりです。

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

そして、質問のためのテーブル名はtable

タイムスタンプはすべて、1日のoccurred深夜から深夜(排他的)の範囲内になります。これまでのところ、私のクエリは次のようになります。

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

24個の整数のリスト(1日の1時間ごとに1つ)として出力をフォーマットできれば、名前を返す必要はありません。

4

3 に答える 3

3
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長期間にわたる1時間ごとの合計が得られます。複数の合計は1以上であるため、2つの結果は合計されませcount(DISTINCT x)count(DISTINCT x)

于 2012-07-18T15:53:27.760 に答える
3

私があなたが望むものを正しく理解しているなら、あなたは書くことができます:

SELECT EXTRACT(HOUR FROM occurred),
       COUNT(DISTINCT name)
  FROM ...
 WHERE ...
 GROUP
    BY EXTRACT(HOUR FROM occurred)
 ORDER
    BY EXTRACT(HOUR FROM occurred)
;
于 2012-07-18T15:54:17.967 に答える
2

あなたはこれを時間単位で欲しい:

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

これは、1日だけのデータがあることを前提としています。そうしないと、異なる日の時間数が組み合わされます。これを回避するには、日付情報も含める必要があります。

于 2012-07-18T15:55:41.813 に答える