Dynamic alternative to pivot with CASE and GROUP BY

后端 未结 5 1704
温柔的废话
温柔的废话 2020-11-22 05:28

I have a table that looks like this:

id    feh    bar
1     10     A
2     20     A
3      3     B
4      4     B
5      5     C
6      6     D
7      7              


        
5条回答
  •  北荒
    北荒 (楼主)
    2020-11-22 06:21

    In your case I guess an array is good. SQL Fiddle

    select
        bar,
        feh || array_fill(null::int, array[c - array_length(feh, 1)]) feh
    from
        (
            select bar, array_agg(feh) feh
            from foo
            group by bar
        ) s
        cross join (
            select count(*)::int c
            from foo
            group by bar
            order by c desc limit 1
        ) c(c)
    ;
     bar |      feh      
    -----+---------------
     A   | {10,20,NULL}
     B   | {3,4,NULL}
     C   | {5,NULL,NULL}
     D   | {6,7,8}
    

提交回复
热议问题