简体   繁体   中英

Pivoting column Postgresql

I have a table that looks like this:

username     item_name   total_units_per_username    
abc@gma.com   laptop      2
abc@gma.com   watch       2
xyz@gma.com  phone        3
xyz@gma.com  laptop       3
xyz@gma.com  watch        3

what I would like is a table that looks like this:

total_units_per_username    item_name               frequency
3                        phone, laptop, watch      1

Essentially I want to pivot the item_name column, concatenate all the values over the total_units_per_username, and count the frequency of that occurrence. I'm using Snowflake.

Thanks!

I think you want two aggregations:

select numitems, items, count(*) as freq
from (select username,
             string_agg(item_name order by item_name, ', ') as items,
             count(*) as numitems
      from t
      group by username
     ) t
group by numitems, items;

EDIT:

You can also do this with array_agg() :

select numitems, items, count(*) as freq
from (select username,
             array_agg(item_name order by item_name) as items,
             count(*) as numitems
      from t
      group by username
     ) t
group by numitems, items;

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM