powered by simpleCommunicator - 2.0.50     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Вопрос по схеме Oracle HR
7 сообщений из 7, страница 1 из 1
Вопрос по схеме Oracle HR
    #40071119
LiQuid
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день.
1. Нужно вывести город, максимальную зарплату в городе и сотрудника, который получает максимальную зарплату.(HR- схема)
Код: plsql
1.
2.
3.
4.
5.
select l.city, e.last_name, e.salary from locations l 
    inner join departments d on l.location_id = d.location_id
    inner join employees e on d.department_id = e.department_id
    and e.salary = (select max(salary) from employees where department_id = d.department_id)
    group by l.city, e.last_name, e.salary



2. Нужно вывести город, минимальную зарплату в городе, и сотрудника, который получает эту минимальную зарплату получает. (HR- схема)
Код: plsql
1.
2.
3.
4.
5.
6.
select l.city, e.last_name, e.salary from locations l 
    inner join departments d on l.location_id = d.location_id
    inner join employees e on d.department_id = e.department_id
    and e.salary = (select min(salary) from employees where department_id = d.department_id)
    group by l.city, e.last_name, e.salary
    order by e.salary;



Но коды не верные.
Прошу помочь.
Правильные результаты прикрепил.
Спасибо.
...
Рейтинг: 0 / 0
Вопрос по схеме Oracle HR
    #40071122
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LiQuid,

максимальную зарплату в городе , а не в подразделении (select max(salary) from employees where department_id = d. department_id )


.....
stax
...
Рейтинг: 0 / 0
Вопрос по схеме Oracle HR
    #40071143
LiQuid
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Stax,

А как связать в e.salary = (select min(salary) from employees..) с таблицей Locations и столбцом city?
...
Рейтинг: 0 / 0
Вопрос по схеме Oracle HR
    #40071209
LiQuid
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Собственно вот схема HR.
...
Рейтинг: 0 / 0
Вопрос по схеме Oracle HR
    #40071265
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LiQuid,

Так и группируй до города, а не до зарплаты
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
select 
    l.city, 
    min(e.last_name) keep (dense_rank first order by e.salary) last_name, 
    min(e.salary) salary 
from hr.locations l 
    inner join hr.departments d on l.location_id = d.location_id
    inner join hr.employees e on d.department_id = e.department_id
group by l.city;
...
Рейтинг: 0 / 0
Вопрос по схеме Oracle HR
    #40071321
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LiQuid
Stax,

А как связать в e.salary = (select min(salary) from employees..) с таблицей Locations и столбцом city?


как и в основном запросе ,locations, departments, ето шоб не ломать Ваш изначальный запрос

и надо уточнить, если два человека получают мах/мин зп то?



.....
stax
...
Рейтинг: 0 / 0
Вопрос по схеме Oracle HR
    #40071340
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
env
LiQuid,

Так и группируй до города, а не до зарплаты



Это сработает, а как только добавим например first_name:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
select 
    l.city, 
    min(e.first_name) keep (dense_rank first order by e.salary) last_name, 
    min(e.last_name) keep (dense_rank first order by e.salary) last_name, 
    min(e.salary) salary 
from hr.locations l 
    inner join hr.departments d on l.location_id = d.location_id
    inner join hr.employees e on d.department_id = e.department_id
group by l.city;



можем получить неправильный результат. При использовании KEEP желательно всегда детерминировать ORDER BY:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
select 
    l.city, 
    min(e.first_name) keep (dense_rank first order by e.salary,e.rowid) last_name, 
    min(e.last_name) keep (dense_rank first order by e.salary,e.rowid) last_name, 
    min(e.salary) salary 
from hr.locations l 
    inner join hr.departments d on l.location_id = d.location_id
    inner join hr.employees e on d.department_id = e.department_id
group by l.city;



SY.
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Вопрос по схеме Oracle HR
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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