Функция SQL для подсчета нескольких переменных как «обе»

В этом сценарии есть два столбца.

  • Столбец A = идентификатор обращения (уникальный идентификатор записи).
  • Столбец B = Пол. Возможные значения: мужской, женский.

Предостережение Если идентификатор дела связан с несколькими полами, он может иметь несколько записей.

Пример набора данных:

ColumnA  ColumnB
Case001  Male        
Case001  Female 
Case002  Male 
Case003  Female 
data set continues... 

Вопрос: Я хотел бы классифицировать результаты как в случае 001, где есть два результата как «Оба». Как лучше всего подойти к этому решению? Есть ли формула или стандартный способ сделать это?

Пример желаемого набора данных:

ColumnA  ColumnB
Case001  Both           
Case002  Male 
Case003  Female 
data set continues... 

Спасибо!

Я могу выполнить оператор case и подзапросы. Тем не менее, я ожидаю, что будет лучшее решение.

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

Ответы 3

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

select col1,
       (case when min(gender) = max(gender) then min(gender)
             else 'both'
        end) as gender
from cases c
group by col1;
Ответ принят как подходящий

Вы можете использовать EXISTS в операторе CASE:

select distinct
  t.ColumnA,
  case 
    when exists (
      select 1 from tablename
      where ColumnA = t.ColumnA and ColumnB <> t.ColumnB
    ) then 'Both'
    else t.ColumnB
  end
from tablename t

group by с предложениями having в сочетании с union all, как показано ниже, может быть хорошей альтернативой:

with t( ColumnA, ColumnB ) as
(
 select 'Case001', 'Male'   union all
 select 'Case001', 'Female' union all
 select 'Case002', 'Male'   union all
 select 'Case003', 'Female'    
)    
select ColumnA, 'Both' ColumnB from t group by ColumnA having count(distinct ColumnB) = 2
union all
select ColumnA, max(ColumnB)   from t group by ColumnA having count(distinct ColumnB) = 1;

ColumnA ColumnB
------- -------
Case001 Both
Case002 Male
Case003 Female

Поскольку есть только два возможных случая для полов, когда один из них или оба из них

Demo

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