PostgreSQL交叉表与计数查询或任何其他方式

PostgreSQL交叉表与计数查询或任何其他方式,sql,postgresql,crosstab,Sql,Postgresql,Crosstab,我正试图找出PostgreSQL中的交叉表函数,但我遇到了问题。我读了几个问题和答案,但由于某些原因,我无法根据需要转换您的答案。 我有一张如下所示的表格: start1 finish1 year1 1 1 2015 1 2 2013 1 1 2011 1 3 2011 2 2 2014 2 2 2011 2 1 2012 2

我正试图找出PostgreSQL中的
交叉表
函数,但我遇到了问题。我读了几个问题和答案,但由于某些原因,我无法根据需要转换您的答案。 我有一张如下所示的表格:

start1  finish1 year1
1          1    2015
1          2    2013
1          1    2011
1          3    2011
2          2    2014
2          2    2011
2          1    2012
2          3    2015
3          1    2010


create table  test (
start1 int, finish1 int, year1 int);

insert into test values 
(1,1,2015),(1,2,2013),
(1,1,2011),(1,3,2011),
(2,2,2014),(2,2,2011),
(2,1,2012),(2,3,2015),
(3,1,2010);
      finish        
  start :   1 : 2 : 3
    1   :   2 : 1 : 1
    2   :   1 : 2 : 1
    3   :   1 : 0 : 0
我希望得到如下结果:

start1  finish1 year1
1          1    2015
1          2    2013
1          1    2011
1          3    2011
2          2    2014
2          2    2011
2          1    2012
2          3    2015
3          1    2010


create table  test (
start1 int, finish1 int, year1 int);

insert into test values 
(1,1,2015),(1,2,2013),
(1,1,2011),(1,3,2011),
(2,2,2014),(2,2,2011),
(2,1,2012),(2,3,2015),
(3,1,2010);
      finish        
  start :   1 : 2 : 3
    1   :   2 : 1 : 1
    2   :   1 : 2 : 1
    3   :   1 : 0 : 0
拥有所有的起点和终点,并计算它们在同一点上完成的次数

为了实现上述输出,我编写了如下查询:

SELECT *
FROM   crosstab(
      'SELECT polygon_id, count(dest_polygon_id)
       FROM   test
       ORDER  BY 1,2')  
AS ct ("start" int, "finish" int);

但是,它的输出并不像预期的那样正确。请帮帮我。

我认为这种类型的查询很容易通过条件聚合完成:

select start1,
       sum(case when finish1 = 1 then 1 else 0 end) as finish1,
       sum(case when finish1 = 2 then 1 else 0 end) as finish2,
       sum(case when finish1 = 3 then 1 else 0 end) as finish3
from test
group by start1
order by start1;

这是正确的,但我正在处理大数据,我有18万个起点和终点。是否有任何可能的解决方案可以同时处理所有数据?我的意思是,我有从1到数百万的数字,而不是从1到3。抱歉,再次尝试,但我再次添加了一行,它没有给出正确的答案。为了进一步澄清,我正在寻找一种方法,就像下一页的示例1中所写的那样:但这里是pivot,我不能将pivot与postgresql一起使用(我想)