#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
)