Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Как сделать сортировку в подзапросе / 15 сообщений из 15, страница 1 из 1
22.11.2018, 23:48
    #39737234
Artem_ka_123
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сделать сортировку в подзапросе
Вот задание :Создайте запрос, который выведет имена, номер отдела
и зарплату сотрудников из отдела №20 которые идут на
2-м и 3-ем месте по уровню зарплаты в этом отделе.
Код: plsql
1.
2.
3.
4.
select ename,deptno ,sal from emp
    where deptno=20
    and sal!=(select max(sal) from emp where deptno=20)
    and rownum<=2;



Нужно сам результат подзапроса передать уже отсортированным по убыванию.

Когда пытаюсь добавить order by в подзапрос - получаю ошибку.
Как решить эту проблему?
...
Рейтинг: 0 / 0
23.11.2018, 00:49
    #39737245
vkle
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сделать сортировку в подзапросе
А нафига тут подзапрос? Нужно то вернуть две записи, начиная со второй, а с этим LIMIT справиться должен.
...
Рейтинг: 0 / 0
23.11.2018, 01:05
    #39737248
Artem_ka_123
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сделать сортировку в подзапросе
vkle,

Дело в том что в таком случае выведется только первые 2 неотсортированные строки(из 2000;800;2900 останется 2000;800)
(Цифры взяты для примера)
Мне нужно как раз чтобы из подзапроса передались 2 строки из 3 у которых sal самый большой .Либо же просто отсортированные 3 строки , из который останутся 2 командой
Код: plsql
1.
rownum<=2;
...
Рейтинг: 0 / 0
23.11.2018, 01:07
    #39737249
vkle
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сделать сортировку в подзапросе
А что мешает в этом случае сделать сортировку?
...
Рейтинг: 0 / 0
23.11.2018, 01:12
    #39737250
Artem_ka_123
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сделать сортировку в подзапросе
vkle,

Смотри в чем дело, сортируется уже результат работы запроса с подзапросом, которые возвращают 3 строки. Сортировка должна быть обязательно в с самом конце ,иначе она работать не будет, как я понимаю. Если ограничить результат подзапроса двумя строками , то это не даст нам нужного результата
...
Рейтинг: 0 / 0
23.11.2018, 01:13
    #39737251
vkle
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сделать сортировку в подзапросе
Но кстати да, мой вариант не будет правильно работать, если у двух или более сотрудников одинаковая максимальная зарплата. В этом смысле Ваш вариант правильный.
Используйте алиас таблицы, чтобы указать, о каком именно экземпляре таблице идет речь в той или иной части запроса.
...
Рейтинг: 0 / 0
23.11.2018, 01:17
    #39737253
Artem_ka_123
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сделать сортировку в подзапросе
vkle,

А как вот это сделать? А то мы это ещё не проходили. А задание дали
...
Рейтинг: 0 / 0
23.11.2018, 01:52
    #39737259
vkle
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сделать сортировку в подзапросе
Artem_ka_123Если ограничить результат подзапроса двумя строками , то это не даст нам нужного результатаВ Вашем варианте результатом подзапроса должна быть одна строка - максимальная зарплата в отделе, которая не нужна в выдаче. Это значение исключается из выборки в предложении WHERE.
Соответственно, в конечной выдаче берем лимит в две строчки из отсортированной по убыванию зарплаты
... ORDER BY sal DESC LIMIT 2
Как раз и будут второе и третье места по отделу.
Не так?
...
Рейтинг: 0 / 0
23.11.2018, 05:32
    #39737271
paver
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сделать сортировку в подзапросе
Artem_ka_123Вот задание :Создайте запрос, который выведет имена, номер отдела
и зарплату сотрудников из отдела №20 которые идут на
2-м и 3-ем месте по уровню зарплаты в этом отделе.

Так что делать, если одинаковая максимальная зарплата у двух или более сотрудников? Исключить из вывода их всех или любого одного?
...
Рейтинг: 0 / 0
23.11.2018, 09:18
    #39737307
Artem_ka_123
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сделать сортировку в подзапросе
vkle,
вот что получается
...
Рейтинг: 0 / 0
23.11.2018, 09:22
    #39737308
Artem_ka_123
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сделать сортировку в подзапросе
paver,

Исключить из вывода их всех. Но в данном случае это и так работает , две строки с одинаковым максимальным результатом sal= 3000 исключаются. Мне нужно как то либо из подзапроса вернуть отсортированные данные ,либо уже произвести ограничение в строки после последней сортировки order by (но на последнее ругается сам интерпретатор sql)
...
Рейтинг: 0 / 0
23.11.2018, 09:25
    #39737311
Artem_ka_123
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сделать сортировку в подзапросе
Artem_ka_123,

Вот выведены все строки с работниками 20-го отдела для наглядности .Выше есть с результатом подзапроса
...
Рейтинг: 0 / 0
23.11.2018, 09:56
    #39737336
paver
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сделать сортировку в подзапросе
Artem_ka_123paver,
Исключить из вывода их всех. Но в данном случае это и так работает , две строки с одинаковым максимальным результатом sal= 3000 исключаются. Мне нужно как то либо из подзапроса вернуть отсортированные данные ,либо уже произвести ограничение в строки после последней сортировки order by (но на последнее ругается сам интерпретатор sql)

1. В подзапросе нужно получить значения з/п с номерами 2 и 3. Это достигается через конструкцию SELECT DISTINCT ... ORDER BY ... LIMIT 1,2
2. В запросе получаете всех сотрудников, у которых такая з/п, используя конструкцию WHERE ... IN (подзапрос)
...
Рейтинг: 0 / 0
23.11.2018, 12:08
    #39737432
Karbafos
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сделать сортировку в подзапросе
Artem_ka_123,

что-то не похоже это на My SQL
...
Рейтинг: 0 / 0
23.11.2018, 12:12
    #39737434
Karbafos
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сделать сортировку в подзапросе
Artem_ka_123,

поскольку у тебя Oracle, самый прямой путь в этой задаче -- оконная функция rank() over()
решать через select max() это прошлый век

аналогично с mysql с версии 8.0 и mariadb 10.2 и выше
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Как сделать сортировку в подзапросе / 15 сообщений из 15, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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