Помогите построить запрос по заданной схеме - PullRequest
1 голос
/ 08 апреля 2011

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

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

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

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

Спасибо.

Ответы [ 2 ]

4 голосов
/ 08 апреля 2011

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

select count(personId)
FROM
(
select personId
from serialNumber_tbl natural join entitlement_tbl
group by personId
having count(distinct entitlement_id) >= 5
) X
1 голос
/ 09 апреля 2011

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

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
                )

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

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
                )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...