#sql #sql-server #tsql #join #count
#sql #sql-сервер #tsql #Присоединиться #количество
Вопрос:
У меня есть запрос ниже, который даст мне идентификатор сотрудника и количество раз, когда он входил в приложение
SELECT E.[EmployeeId], COUNT(*) LoginCount
FROM tblEmployee E
JOIN tblAccessLog AL ON E.EmployeeId = AL.EmployeeId
WHERE AL.[AccessType] = 212
GROUP BY E.[EmployeeId]
Я хотел бы получить тех сотрудников, которые вошли в систему больше определенного порога, позвольте мне взять 100.
SELECT E.[EmployeeId], COUNT(*) LoginCount
FROM tblEmployee E
JOIN tblAccessLog AL ON E.EmployeeId = AL.EmployeeId
WHERE AL.[AccessType] = 212
GROUP BY E.[EmployeeId]
HAVING COUNT(*) > 100
Теперь я хотел бы получить количество, возвращенное приведенным выше запросом, я имею в виду количество сотрудников, которые заходили на мой сайт более 100 раз.
Я попробовал @@ROWCOUNT
, и он возвращает количество пользователей, но это возвращает 2 набора результатов, и я ищу, есть ли лучший способ вместо использования @@ROWCOUNT
.
Ответ №1:
Просто используйте ваш текущий запрос в качестве подзапроса.
SELECT COUNT(*)
FROM (
SELECT E.[EmployeeId], COUNT(*) LoginCount
FROM tblEmployee E
JOIN tblAccessLog AL ON E.EmployeeId = AL.EmployeeId
WHERE AL.[AccessType] = 212
GROUP BY E.[EmployeeId]
HAVING COUNT(*) > 100
) X
Ответ №2:
Использование оконного COUNT
:
Select E.[EmployeeId], COUNT(*) LoginCount, COUNT(*) OVER() AS cnt_of_Employee
FROM tblEmployee E
JOIN tblAccessLog AL ON E.EmployeeId = AL.EmployeeId
WHERE AL.[AccessType] = 212
GROUP BY E.[EmployeeId]
HAVING COUNT(*) > 100