проект, на который было выделено максимальное количество сотрудников - PullRequest
0 голосов
/ 01 июня 2018

У меня есть эти таблицы со следующими столбцами:

Employee24 (EMPLOYEEID, FIRSTNAME, LASTNAME, GENDER);

PROJECT24   (PROJECTID  PROJECTNAME EMPLOYEEID);

Я хочу написать запрос для поиска проекта, в котором выделено максимальное количество сотрудников.

SELECT FIRSTNAME, LASTNAME
 FROM EMPLOYEE24 E
  WHERE E.EMPLOYEEID IN ( SELECT L2.EMPLOYEEID 
                            FROM PROJECT24 L2 group by l2.employeeid)\\ 

Ответы [ 2 ]

0 голосов
/ 01 июня 2018

Что вы хотите сделать, если есть связи?Это важный вопрос, и почему row_number() / rank() может быть лучшим выбором:

select p.*
from (select p.projectid, p.projectname, count(*) as num_employees,
             rank() over (order by count(*) desc) as seqnum
      from project25 p
      group by p.projectid, p.projectname
     ) p
where seqnum = 1;

Примечания:

  • Приведенный выше запрос возвращает все строки, если есть связи,Если вам нужен только один (произвольный) проект, когда есть связь, тогда используйте row_number().
  • Я не вижу причин присоединяться к employee24.
  • Ваша структура данных странная.Отношения между проектами и сотрудниками должны быть в отдельной таблице, скажем project_employees.Это должно иметь projectid, но не имя.Имя должно быть в project24.
0 голосов
/ 01 июня 2018

Вы можете попробовать что-то вроде этого (хотя я вполне уверен, что это можно сделать другими способами):

SELECT *
FROM   (SELECT   prj.projectid,
                 prj.projectname,
                 COUNT(*) AS number_employees
        FROM     project24  prj
        JOIN     employee24 emp
          ON     prj.employeeid = emp.employeeid
        GROUP BY prj.projectid,
                 prj.projectname
        ORDER BY number_employees DESC)
WHERE  ROWNUM = 1;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...