Помогите построить запрос с учетом схемы

#sql #tsql #schema

#sql #tsql #схема

Вопрос:

Вот схема для базы данных: http://i.stack.imgur.com/omX60.png

Вопрос в том, сколько людей имеют по крайней мере пять прав доступа?

У меня это получилось, пожалуйста, скажите мне, насколько это неправильно, и исправьте это.

 select count(personId)
from serialNumber_tbl natural join entitlement_tbl
group by personId
having sum(entitlementID) > 5
  

Спасибо.

Ответ №1:

Условием по крайней мере для 5 является >= 5 , не > 5
Вам нужно подсчитать различные идентификаторы в таблице прав, а не person
Это даст вам persons, затем вам нужно выполнить подзапрос, чтобы найти количество persons.

 select count(personId)
FROM
(
select personId
from serialNumber_tbl natural join entitlement_tbl
group by personId
having count(distinct entitlement_id) >= 5
) X
  

Ответ №2:

Ваш запрос не совсем понятен. Вы запрашиваете количество пользователей с более чем пятью строками прав доступа, независимо от того, существуют ли они под несколькими серийными номерами или нет? Если это так, вы могли бы сделать что-то вроде:

 Select Count(*) As CountOfPeople
From Person_tbl As P
Where Exists    (
                Select 1
                From serialNumbers As S1
                    Join entitlement_tbl As E1
                        On E1.serialNumberId = S.serialNumberId
                Where S1.personId = P.personId
                Having Count(*) >= 5
                )
  

Или вы просите найти количество пользователей, у которых есть SerialNumber с более чем пятью правами доступа? Если это так, то вы могли бы сделать что-то вроде:

 Select Count(*) As CountOfPeople
From Person_tbl As P
Where Exists    (
                Select 1
                From serialNumbers As S1
                    Join entitlement_tbl As E1
                        On E1.serialNumberId = S.serialNumberId
                Where S1.personId = P.personId
                Having Count( Distinct S1.serialNumberId ) >= 5
                )