Сопоставьте "MALE", но не "FEMALE" в SQL

У меня есть строковый столбец со следующими значениями

Пол МУЖСКОЙ; ЖЕНСКИЙ; NON_BINARY МУЖСКОЙ МУЖСКОЙ; ЖЕНСКИЙ ЖЕНСКИЙ

Я хочу создать два индикатора: один, если поле 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, кстати.

Какой индикатор вам нужен, если строка содержит оба, как в столбцах, содержащих MALE; FEMALE

topsail 07.02.2023 23:03

Рассматривали ли вы SELECT DISTINCT(STATE) FROM CUSTOMER;

Vector 08.02.2023 01:24

@topsail в данном случае мне это не нужно. Но если я это сделаю, я, вероятно, просто проверю в другом подзапросе, что оба индикатора равны 1.

Lea C. 08.02.2023 16:03
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
1
3
55
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 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           

оба с выводом (если применимы к образцам данных в вашем вопросе)

Другие вопросы по теме