У меня есть строковый столбец со следующими значениями
Я хочу создать два индикатора: один, если поле Genders
содержит значение MALE
, и другой, если оно содержит значение FEMALE
.
Изначально я просто делал
,CASE WHEN genders LIKE '%MALE%' THEN 1 ELSE 0 END as gender_male
,CASE WHEN genders LIKE '%FEMALE%' THEN 1 ELSE 0 END as gender_female
но потом я понял, что MALE
всегда будет присутствовать, так как это подстрока FEMALE
.
Затем я попробовал это
,CASE WHEN 'MALE' in UNNEST(split(genders, ";")) THEN 1 ELSE 0 END as gender_male
,CASE WHEN 'FEMALE' in UNNEST(split(genders, ";")) THEN 1 ELSE 0 END as gender_female
но это тоже не сработало.
Я использую BigQuery, кстати.
Рассматривали ли вы SELECT DISTINCT(STATE) FROM CUSTOMER;
@topsail в данном случае мне это не нужно. Но если я это сделаю, я, вероятно, просто проверю в другом подзапросе, что оба индикатора равны 1.
Вместо этого используйте ниже
,CASE WHEN REGEXP_CONTAINS(genders, r'\bMALE\b') THEN 1 ELSE 0 END as gender_male
,CASE WHEN REGEXP_CONTAINS(genders, r'\bFEMALE\b') THEN 1 ELSE 0 END as gender_female
или
,IF(REGEXP_CONTAINS(genders, r'\bMALE\b'), 1, 0) as gender_male
,IF(REGEXP_CONTAINS(genders, r'\bFEMALE\b'), 1, 0) as gender_female
оба с выводом (если применимы к образцам данных в вашем вопросе)
Какой индикатор вам нужен, если строка содержит оба, как в столбцах, содержащих
MALE; FEMALE