Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 每小时数据透视表_Sql_Postgresql_Time_Postgresql 9.3_Crosstab - Fatal编程技术网

Sql 每小时数据透视表

Sql 每小时数据透视表,sql,postgresql,time,postgresql-9.3,crosstab,Sql,Postgresql,Time,Postgresql 9.3,Crosstab,我想显示以下给定记录的透视表: 我有一个名为fooo的表,有两列: create table fooo ( cola varchar(5), colb time ); 插入一些记录: insert into fooo values ('a','10:00:00'), ('a','10:30:00'), ('b','20:00:00'), ('c','13:00:00') , ('d','01:00:00'), ('e','10:10:00'), ('f','02:01:00'), ('g'

我想显示以下给定记录的透视表:

我有一个名为
fooo
的表,有两列:

create table fooo (
cola varchar(5),
colb time
);
插入一些记录:

insert into fooo values
  ('a','10:00:00'), ('a','10:30:00'), ('b','20:00:00'), ('c','13:00:00')
, ('d','01:00:00'), ('e','10:10:00'), ('f','02:01:00'), ('g','02:20:00')
, ('h','04:00:00'), ('i','05:00:00'), ('j','06:00:00'), ('k','07:00:00')
, ('l','08:00:00'), ('m','09:00:00'), ('n','22:00:00'), ('o','23:00:00');
预期的输出应如下所示:

预期产出:

cola  01  02  03  04  05  06  07  08  09  10  11  12  13  14  15  16  17  18  19  20  21  22  23    
-------------------------------------------------------------------------------------------------
a                                         2
b                                                                                 1
c                                                     1
d     1
e                                         1
f         1
g         1
h                 1
i                     1
j                         1
k                             1    
l                                 1
m                                     1
n                                                                                          1                   
o                                                                                              1
旁白:
你忘了0/24小时。
使用带前导字符的列名可以避免使用双引号

详情:


哇!谢谢您。是的,我忘了那一小时
0-24
。我为此道歉。
SELECT * FROM crosstab(
       'SELECT cola, EXTRACT(HOUR from colb) AS h, count(*) AS ct
        FROM   fooo
        GROUP  BY 1, 2
        ORDER  BY 1, 2'

       ,'SELECT g::float8 FROM generate_series(0,23) g'
   ) AS ct (cola text
      , h00 int, h01 int, h02 int, h03 int, h04 int, h05 int
      , h06 int, h07 int, h08 int, h09 int, h10 int, h11 int
      , h12 int, h13 int, h14 int, h15 int, h16 int, h17 int
      , h18 int, h19 int, h20 int, h21 int, h22 int, h23 int);