#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