powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / SQL-запрос, выводящий max(count())
18 сообщений из 18, страница 1 из 1
SQL-запрос, выводящий max(count())
    #39776335
alexey_grishinn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Имеется таблица: emp(ename, deptno) - люди и их подразделение.
Необходимо вывести список людей, работающих в подразделении с максимальным количеством сотрудников.
Вот с таким кодом, у меня выводит только количество, но необходимо имена, не понимаю как это реализовать:
авторselect max(mycount)
from(select deptno, count(ename) mycount
from emp group by deptno);
...
Рейтинг: 0 / 0
SQL-запрос, выводящий max(count())
    #39776349
Фотография Щукина Анна
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexey_grishinn,

если отделов с максимальным числом сотрудников окажется больше одного, какой из них выводить? какой-то один случайный? или все?
...
Рейтинг: 0 / 0
SQL-запрос, выводящий max(count())
    #39776350
alexey_grishinn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Лучше всего все, но это для данного запроса не так важно
...
Рейтинг: 0 / 0
SQL-запрос, выводящий max(count())
    #39776354
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexey_grishinnсписок людей, работающих в подразделении с максимальным количеством сотрудников.
Код: plsql
1.
order by count(*) over (partition by deptno) desc fetch first 1 rows with ties
...
Рейтинг: 0 / 0
SQL-запрос, выводящий max(count())
    #39776357
Фотография Щукина Анна
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexey_grishinn,

Для начала - получите список отделов, с максимальным числом сотрудников. Для этого вам потребуется (как вариант) HAVING.
Далее - получите список сотрудников по отделам из первого этапа. Тут к месту будут JOIN исходной таблицы со встроенным представлением (результат запроса первого этапа). Либо можно решить через фильтр с IN-подзапросом
...
Рейтинг: 0 / 0
SQL-запрос, выводящий max(count())
    #39776358
alexey_grishinn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Elic,

Если честно большинство из этих операторов я пока что не знаю и не могу их использовать
...
Рейтинг: 0 / 0
SQL-запрос, выводящий max(count())
    #39776359
Фотография Щукина Анна
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexey_grishinnElic,

Если честно большинство из этих операторов я пока что не знаю и не могу их использоватьну тогда пристально смотрите в сторону GROUP BY + HAVING
...
Рейтинг: 0 / 0
SQL-запрос, выводящий max(count())
    #39776361
Фотография Щукина Анна
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexey_grishinnElic,

Если честно большинство из этих операторов я пока что не знаю и не могу их использоватькроме того, для "fetch first 1 rows with ties" еще и сервер требуется не ниже версии 12c
...
Рейтинг: 0 / 0
SQL-запрос, выводящий max(count())
    #39776363
Фотография Щукина Анна
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexey_grishinnИмеется таблица: emp(ename, deptno) - люди и их подразделение.
Необходимо вывести список людей, работающих в подразделении с максимальным количеством сотрудников.
Вот с таким кодом, у меня выводит только количество, но необходимо имена, не понимаю как это реализовать:
авторselect max(mycount)
from(select deptno, count(ename) mycount
from emp group by deptno);кстати, Oracle умеет вложенные агрегаты. Соответственно, для получения именно максимального числа сотрудников - подзапрос не нужен. можно сделать в одно вложение, через вложенные агрегаты:

Код: plsql
1.
2.
3.
select max(count(ename)) max_count 
  from emp 
 group by deptno
...
Рейтинг: 0 / 0
SQL-запрос, выводящий max(count())
    #39776365
alexey_grishinn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Щукина Анна,

Но для вывода именно списка сотрудников необходимо как раз через GROUP BY + HAVING?
...
Рейтинг: 0 / 0
SQL-запрос, выводящий max(count())
    #39776368
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexey_grishinnElic,

Если честно большинство из этих операторов я пока что не знаю и не могу их использовать
Вам надо решение без аналитики?

....
stax
...
Рейтинг: 0 / 0
SQL-запрос, выводящий max(count())
    #39776369
alexey_grishinn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Stax,

Нет, но в рамки тех знаний, которые мне нужно использовать это не подходит, т.к. решаю задачу для института
...
Рейтинг: 0 / 0
SQL-запрос, выводящий max(count())
    #39776370
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexey_grishinnя пока что не знаю и не могу их использоватьЛаба, студент?
...
Рейтинг: 0 / 0
SQL-запрос, выводящий max(count())
    #39776371
Фотография Щукина Анна
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexey_grishinnЩукина Анна,

Но для вывода именно списка сотрудников необходимо как раз через GROUP BY + HAVING?Как один из вариантов - да:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
-- Просто тестовые данные:
with t  as(
select 1 as dept, 1 as emp from dual union all
select 1 as dept, 2 as emp from dual union all
select 1 as dept, 3 as emp from dual union all
select 2 as dept, 4 as emp from dual union all
select 2 as dept, 5 as emp from dual union all
select 2 as dept, 6 as emp from dual union all
select 3 as dept, 7 as emp from dual union all
select 4 as dept, 8 as emp from dual union all
select 4 as dept, 9 as emp from dual
)
-- Список отделов и их сотрудников, где число сотрудников в отделе - максимально:
select t.*
  from t
  join (-- Список отделов, имеющих максимальное число сотрудников:
         select dept 
           from t
          group by dept 
         having count(emp) = (-- Максимальное число сотрудников:
                               select max(count(emp))
                                 from t
                                group by dept
                             )
       ) v
    on t.dept = v.dept



Также, можно решать на аналитике, или на TOP-N-запросах (как показал Elic).
В целом, можно придумать сильно больше, чем одно решение. Но большая часть из них будет "вариация на тему". А тема - либо группировка и фильтрация результата группировки, либо аналитика и фильтрация результата аналитики, либо новомодные фичи, типа TOP-N query with ties
...
Рейтинг: 0 / 0
SQL-запрос, выводящий max(count())
    #39776372
alexey_grishinn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Elic,

Да, пытаюсь сделать посредством того, что дают в университете
...
Рейтинг: 0 / 0
SQL-запрос, выводящий max(count())
    #39776375
alexey_grishinn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Щукина Анна,

Спасибо вам большое! Пока не совсем разобрался с join, но код работает, буду разбираться как!
...
Рейтинг: 0 / 0
SQL-запрос, выводящий max(count())
    #39776376
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexey_grishinnДа, пытаюсь сделать посредством того, что дают в университетеУчиться лень?
...
Рейтинг: 0 / 0
SQL-запрос, выводящий max(count())
    #39776383
Фотография Щукина Анна
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexey_grishinn Пока не совсем разобрался с join, но код работает, буду разбираться как!
JOIN можно заменить на IN-подзапрос, если в таком синтаксисе вам будет понятнее логика работы запроса:


Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
-- Просто тестовые данные:
with t  as(
select 1 as dept, 1 as emp from dual union all
select 1 as dept, 2 as emp from dual union all
select 1 as dept, 3 as emp from dual union all
select 2 as dept, 4 as emp from dual union all
select 2 as dept, 5 as emp from dual union all
select 2 as dept, 6 as emp from dual union all
select 3 as dept, 7 as emp from dual union all
select 4 as dept, 8 as emp from dual union all
select 4 as dept, 9 as emp from dual
)
-- Список отделов и их сотрудников, где число сотрудников в отделе - максимально:
select t.*
  from t
 where dept in
       (-- Список отделов, имеющих максимальное число сотрудников:
         select dept 
           from t
          group by dept 
         having count(emp) = (-- Максимальное число сотрудников:
                               select max(count(emp))
                                 from t
                                group by dept
                             )
       )
...
Рейтинг: 0 / 0
18 сообщений из 18, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / SQL-запрос, выводящий max(count())
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]