Как преобразовать столбец с несколькими переменными во множество разных логических столбцов?

#sql #postgresql #group-by #pivot

#sql #postgresql #группировать по #сводная

Вопрос:

У меня есть эта таблица:

 ID     action
1       buy
1       sell
1       drop
  

Я хочу превратить это в это

  ID     buy     sell     drop
 1      Yes     Yes       Yes
  

Вот и все.

Ответ №1:

Используйте условную агрегацию:

 select
    id,
    bool_or(action = 'buy')  has_buy,
    bool_or(action = 'sell') has_sell,
    bool_or(action = 'drop') has_drop
from mytable
group by id
  

Это дает вам логические значения (true или false) в новых столбцах, а не строки Да / Нет, которые вы описываете в своем вопросе.

Если вы хотите Да / Нет, то:

 select
    id,
    case when bool_or(action = 'buy')  then 'Yes' else 'No' end has_buy,
    case when bool_or(action = 'sell') then 'Yes' else 'No' end has_sell,
    case when bool_or(action = 'drop') then 'Yes' else 'No' end has_drop
from mytable
group by id