База данных SQL запрашивает основной вопрос - PullRequest
1 голос
/ 28 октября 2010

Реляционная схема:

  • Сотрудник (Enum, Ename)
  • VentingMac (Enum, Cokename, day)

Атрибут Enum inОтношение VentingMac - это внешний ключ, ссылающийся на отношение Employee.

Я хочу перечислить все имена сотрудников (Ename), которые выпивают более 3 (разных) кол в один и тот же день (при условии, что они не пьют одно и то же).кокс каждый день)

1 Ответ

2 голосов
/ 28 октября 2010

Использование EXISTS

SELECT e.ename
  FROM EMPLOYEE e
 WHERE EXISTS(SELECT NULL
                FROM VENTINGMAC vm
               WHERE vm.enum = e.enum
            GROUP BY vm.day, vm.enum
              HAVING COUNT(vm.coke) > 3)

ИСПОЛЬЗОВАНИЕ IN

SELECT e.ename
  FROM EMPLOYEE e
 WHERE e.enum IN (SELECT vm.enum
                    FROM VENTINGMAC vm
                GROUP BY vm.day, vm.enum
                  HAVING COUNT(vm.coke) > 3)

Использование JOIN:

SELECT e.ename
  FROM EMPLOYEE e
  JOIN (SELECT vm.enum
          FROM VENTINGMAC vm
      GROUP BY vm.day, vm.enum
        HAVING COUNT(vm.coke) > 3) y ON y.enum = e.enum

Разбивка

Мясо запросазаключается в проверке таблицы VENTINGMAC, особенно с агрегатными функциями (что означает необходимость в предложении GROUP BY).Я предполагаю, что VENTINGMAC.day содержит только ДАТУ (год, месяц, день) - нет времени, чтобы усложнить ситуацию.Вам нужно сгруппировать по человеку и по дню в таблице, чтобы иметь возможность подсчитать значения coke, как вы видите в предложении HAVING.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...