GROUP BY or COUNT Like Field Values - UNPIVOT?

前端 未结 4 1228
一向
一向 2021-02-11 07:15

I have a table with test fields, Example

id         | test1    | test2    | test3    | test4    | test5
+----------+----------+----------+----------+----------+-         


        
4条回答
  •  无人及你
    2021-02-11 07:25

    Essentially, you need to unpivot your data by test:

    id         | test     | result   
    +----------+----------+----------+
    12345      | test1    | P        
    12345      | test2    | P        
    12345      | test3    | F        
    12345      | test4    | I        
    12345      | test5    | P       
    

    ...

    - so that you can then group it by test result.

    Unfortunately, PostgreSQL doesn't have pivot/unpivot functionality built in, so the simplest way to do this would be something like:

    select id, 'test1' test, test1 result from mytable union all
    select id, 'test2' test, test2 result from mytable union all
    select id, 'test3' test, test3 result from mytable union all
    select id, 'test4' test, test4 result from mytable union all
    select id, 'test5' test, test5 result from mytable union all
    

    ...

    There are other ways of approaching this, but with 40 columns of data this is going to get really ugly.

    EDIT: an alternative approach -

    select r.result, sum(char_length(replace(replace(test1||test2||test3||test4||test5,excl1,''),excl2,'')))
    from   mytable m, 
           (select 'P' result, 'F' excl1, 'I' excl2 union all
            select 'F' result, 'P' excl1, 'I' excl2 union all
            select 'I' result, 'F' excl1, 'P' excl2) r
    group by r.result
    

提交回复
热议问题