Как посчитать значения из нескольких столбцов одной таблицы - PullRequest
0 голосов
/ 24 мая 2019

Я пытаюсь создать один оператор SQL, который возвращает уникальные ненулевые значения из нескольких столбцов, расположенных в одной таблице.

Я пытался создать этот оператор SQL, используя "sum" и "case"как сказано в другой теме stackOverflow, но это не сработало.

И я также попробовал это:

Select count(distinct SYMPTOM_I, SYMPTOM_II, SYMPTOM_III, SYMPTOM_IV) 
from DIAGNOSTIC_MEDVIR;
    Create table DIAGNOSTIC_MEDVIR(
        NIP varchar(32) not null,
        DIAGNOSTIC_TIME int not null,
        DAY_TIME varchar(32) not null,
        SEX varchar(8) not null,
        AGE int not null,
        SYMPTOM_I varchar(64) not null,
        SYMPTOM_II varchar(64),
        SYMPTOM_III varchar(64),
        SYMPTOM_IV varchar(64),
        PATHOLOGY_I varchar(64) not null,
        PATHOLOGY_II varchar(64),
        PATHOLOGY_III varchar(64),
        Constraint NIP_PK primary key(NIP),
        Constraint CK_SEX check (SEX='Male' or SEX='Female'),
        Constraint CK_DAYTIME(DAY_TIME='Morning' or DAY_TIME='Evening' or                                 
        DAY_TIME='Night')
    );

Допустим, у меня есть в этой таблице:

Insert into DIAGNOSTIC_MEDVIR 
values ('195889419', 60, 'Morning', 'Male', 68, 'fever',
        'sore throat', 'headache', , 'throat infection', , );

Insert into DIAGNOSTIC_MEDVIR 
values ('195889420', 67, 'Morning', 'Female', 38, 'fever', 
        'headache', , , 'cold', , );

Я хотел бы иметь:

fever: 2
sore throat: 1
headache: 1

1 Ответ

1 голос
/ 24 мая 2019

Этот дизайн проблематичен, и доказательством является само решение.
Что если вы решите добавить еще один столбец с 5-м симптомом?
Вы должны изменить все, все запросы, которые возвращают информацию, такую ​​как этот вопрос.
В любом случае в этом случае вам нужно получить результаты для каждого столбца SYMPTOM_X отдельно и использовать UNION для их объединения. Затем группа, чтобы получить общие результаты:

select t.symptom, count(*) counter from (
  select SYMPTOM_I symptom from DIAGNOSTIC_MEDVIR
  union all
  select SYMPTOM_II from DIAGNOSTIC_MEDVIR
  union all
  select SYMPTOM_III from DIAGNOSTIC_MEDVIR
  union all
  select SYMPTOM_IV from DIAGNOSTIC_MEDVIR
) t
where t.symptom is not null
group by t.symptom

См. Демоверсию .
Результаты:

> symptom     | counter
> :---------- | ------:
> fever       |       2
> headache    |       2
> sore throat |       1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...