#sql #postgresql
#sql #postgresql
Вопрос:
Я пытаюсь запросить таблицу, которая имеет (user_id, segmentd_id, date), чтобы создать новую таблицу, подобную этой:
итак, я думал о чем-то подобном, но это не работает:
WITH Temp_seg as
SELECT
user_id,
Segment1,
Segment2,
Segment3,
Segment4,
Segment5,
Segment6,
Segment7,
Segment8,
Segment9,
Segment10
(select
user_id,
(case when segment_id in (1) then "Yes" else empty end) Segment1,
(case when segment_id in (2) then "Yes" else empty end) Segment2,
(case when segment_id in (3) then "Yes" else empty end) Segment3,
(case when segment_id in (4) then "Yes" else empty end) Segment4,
(case when segment_id in (5) then "Yes" else empty end) Segment5,
(case when segment_id in (6) then "Yes" else empty end) Segment6,
(case when segment_id in (7) then "Yes" else empty end) Segment7,
(case when segment_id in (8) then "Yes" else empty end) Segment8,
(case when segment_id in (9) then "Yes" else empty end) Segment9,
(case when segment_id in (10) then "Yes" else empty end) Segment10,
from Segments
where date = last_7_days
and segment_id in (1,2,3,4,5,6,7,8,9,10)
group by user_id
Кто-нибудь может мне помочь?
Спасибо
Комментарии:
1. Я удалил несовместимые теги базы данных. Пожалуйста, помечайте только ту базу данных, которую вы действительно используете. Четкое объяснение логики также помогло бы.
2. Я использую postgresql, логика заключается в том, что в segment_id будут значения от 1 до 10, мне нужна новая таблица с идентификатором пользователя, где для каждого пользователя я отмечаю «да» в каждом столбце, к которому они принадлежат. имеет ли это смысл?
Ответ №1:
Я не уверен, что это то, что вам нужно:
select user_id
, max(case when segmentd_id = 1 then 'Yes' end) Segment1
, max(case when segmentd_id = 2 then 'Yes' end) Segment2
, max(case when segmentd_id = 3 then 'Yes' end) Segment3
from segments
group by user_id
order by user_id
Вот демонстрация:
Если вам нужно будет добавить where caluse для заполнения данных только за последние 7 дней, вы можете использовать это:
select user_id
, max(case when segmentd_id = 1 then 'Yes' end) Segment1
, max(case when segmentd_id = 2 then 'Yes' end) Segment2
, max(case when segmentd_id = 3 then 'Yes' end) Segment3
from segments
where date_c >= CURRENT_DATE -7
group by user_id
order by user_id
Комментарии:
1. Спасибо именно то, что я искал!!