#sql #postgresql
#sql #postgresql
Вопрос:
У нас возникли проблемы с решением части упражнения в курсе SQL, вот часть набора данных:
Запрос, который мы ищем, должен: Найти заболевания, которые можно лечить гидрокортизоном, но не этанерцептом.
Есть идеи?
Комментарии:
1. Пожалуйста, укажите в своем вопросе используемую вами СУБД. MsSqlServer, PostGres, MySQL и т.д. и т.п. и т.п.
Ответ №1:
Сгруппируйте по имени болезни и задайте условие в предложении HAVING:
select DiseaseName
from tablename
where DrugName in ('hydrocortisone', 'etanercept')
group by DiseaseName
having count(case when DrugName = 'etanercept' then 1 end) = 0
В Mysql разница заключалась бы в having
предложении:
having sum(DrugName = 'etanercept') = 0
И в Potgresql:
having sum((DrugName = 'etanercept')::int) = 0
Другого способа с НЕ СУЩЕСТВУЕТ:
select DISTINCT t.DiseaseName
from tablename t
where t.DrugName = 'hydrocortisone'
and not exists (select 1 from tablename where DiseaseName = t.DiseaseName and DrugName = 'etanercept')
Комментарии:
1. Возможно ли обеспечить это в MySQL, поскольку мы сравниваем различные СУБД
2. @lebech . . . Это отвечает на вопрос, который вы задали здесь. Если у вас есть вопрос о другой базе данных, то его следует задать как новый вопрос.
Ответ №2:
Вы можете использовать следующий запрос:
SELECT "diseasename" FROM TABLE1
GROUP BY "diseasename"
HAVING MIN("DRUGNAME") = MAX("DRUGNAME") AND MAX("DRUGNAME") = 'hydrocortisone';