#sql #sql-server
#sql #sql-сервер
Вопрос:
Мне нужно написать sql-запрос, в котором я подсчитываю количество сотрудников, которые не указаны. У каждого сотрудника может быть несколько записей с комментариями участников. Если они представлены, то дата объекта будет иметь дату, в противном случае будет иметь нулевое значение. Я хочу игнорировать тех, кто был показан хотя бы один раз (будет иметь дату, связанную в столбце даты функции)
Например:
Empid comment featuredate
101 cool null
101 bad 2/2/2020
102 nice null
102 not nice null
таким образом, мой запрос должен возвращать только empid 102, поскольку они не отображаются по крайней мере один раз.
Что я пробовал?
Я попробовал group by вместе с having, но застрял там.
Ответ №1:
Вы можете использовать агрегирование:
select empid
from t
group by empid
having max(featuredate) is null;
Примечание: Это предполагает, что все сотрудники находятся в вашей таблице. Если нет, используйте not exists
:
select e.*
from employees e
where not exists (select 1
from features f
where f.empid = e.empid and f.featuredate is not null
);
Если вам нужно только количество, вы можете использовать любой из них в качестве подзапроса. Или просто используйте select count(*)
со вторым запросом.
Ответ №2:
Вы можете использовать group by
следующее:
Select empid
From your_table
Group by empid
Having max(featuredate) is null;