У меня есть некоторые трудности, связанные с упражнением SQL для моего курса «Введение в базу данных». Стандарт SQL, который мы в основном используем, это Oracle (тот, который совместим с Apex).
У меня есть следующая база данных SQL (первичные ключи полужирный ):
TEENAGER ( SSN , имя, фамилия, дата рождения, CityOfResidence, пол)
ACTIVITY ( ActivityCode , AName, описание, категория)
SUMMER-CAMP ( CampCode , CampName, City)
ПОДПИСКА НА ACTIVITY-IN-SUMMER-CAMP ( SSN, ActivityCode, CampCode, SubscriptionDate )
Вот что спрашивает упражнение:
"Для каждого подростка, родившегося до 2005 года, который подписался на мероприятия, организованные по крайней мере в 5 различных летних лагерях, с указанием имени, фамилии, рождения дата подростка и название каждого летнего лагеря, на который подросток подписывался на все различные мероприятия, организованные лагерем. "
У меня нет проблем с поиском SSN подростков, родившихся до этого 2005 и кто подписался как минимум на 5 лагерей, и я могу найти количество различных мероприятий, организованных лагерем. Как мне удается использовать эту информацию, чтобы найти окончательный результат?
Теперь это моя попытка решения (я добавил два встроенных комментария с "#" для ясности):
FROM TEENAGER T, SUMMER-CAMP SC, SUBSCRIPTION-TO-ACTIVITY-IN-SUMMER-CAMP STAISC
WHERE T.SSN = STAISC.SSN AND STAISC.CampCode = SC.CampCode
AND SSN IN (SELECT T.SSN #born before 2005 and at least 5 camps
FROM TEENAGER T, SUBSCRIPTION-TO-ACTIVITY-IN-SUMMER-CAMP STAISC
WHERE T.BirthDate < TO_DATE('01/01/2005', 'DD/MM/YYYY')
AND T.SSN = STAISC.SSN
GROUP BY T.SSN
HAVING COUNT(DISTINCT STAISC.CampCode) > 4)
GROUP BY STAISC.CampCode, T.SSN
HAVING (STAISC.CampCode, COUNT(DISTINCT ActivityCode)) IN (SELECT CampCode, COUNT(DISTINCT ActivityCode) #number of activities in camps
FROM SUBSCRIPTION-TO-ACTIVITY-IN-SUMMER-CAMP
GROUP BY CampCode)```
Как видите, я использую конструктор кортежей в самом внешнем запросе в предложении HAVING, чтобы попытаться использовать информацию об общем количестве мероприятий, организованных в лагере. Могу ли я это сделать и сработает ли это? (Профессор не предоставил нам никакой базы данных, поскольку на экзамене мы должны будем записать запрос, не имея возможности его выполнить).
Заранее спасибо!