Форум программистов, компьютерный форум, киберфорум
Oracle
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/15: Рейтинг темы: голосов - 15, средняя оценка - 4.80
1 / 1 / 0
Регистрация: 01.11.2015
Сообщений: 211

Выведите информацию о сотрудниках, отсортировав их по идентификационному номеру

01.11.2017, 20:00. Показов 3385. Ответов 17
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте!
Не могу выполнить запрос, работаю на оракле в базе данных HR!
Помогите пожалуйста!

Выведите информацию о сотрудниках, отсортировав их по идентификационному номеру, работающих в первых трех попавшихся департаментах. (Подсказка: id сотрудников следуют по порядку с шагом 1)
Сообщение должно выглядеть так:
Steven 90
Neena 90
Lex 90
Alexander 60
Bruce 60
David 60
Valli 60
Diana 60
Nancy 100
Daniel 100
John 100
Ismael 100
Jose Manuel 100
Luis 100
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
01.11.2017, 20:00
Ответы с готовыми решениями:

Распечатать файл, содержащий информацию о сотрудниках фирмы, отсортировав информацию.
Дан файл, содержащий информацию о сотрудниках фирмы: фамилия, имя, отчество, пол, возраст, размер зарплаты. За один просмотр файла...

Выведите информацию о студентах, отсортировав их по возрасту
Пусть дан файл students.csv, в котором содержится информация о студентах в виде: №;ФИО;Возраст;Группа 1;Иванов Иван...

Файл: Выведите информацию о студентах, отсортировав их по фамилии
Задание 2. Пусть дан файл students.csv, в котором содержится информация о студентах в виде: №;ФИО;Возраст;Группа 1;Иванов Иван...

17
765 / 666 / 194
Регистрация: 24.11.2015
Сообщений: 2,163
01.11.2017, 20:23
Цитата Сообщение от MR_Clock Посмотреть сообщение
Подсказка: id сотрудников следуют по порядку с шагом 1
По-моему, это - бред. С тем же успехом id сотрудников могут иметь какой угодно переменный шаг. К сожалению, у меня такой учебной базы нет.

Что такое цифирки после имени? Код департамента? Номер департамента? Зарплата сотрудника? Точнее можно задачу поставить?
0
1 / 1 / 0
Регистрация: 01.11.2015
Сообщений: 211
01.11.2017, 20:40  [ТС]
AGK,
Сорри , цифирки которые рядом это департамент!
Получается там имена по первым 3 департаментам идут! (работающих в первых трех попавшихся департаментах. )
0
1 / 1 / 0
Регистрация: 01.11.2015
Сообщений: 211
01.11.2017, 20:43  [ТС]
AGK, Я на SQL сервера, мог бы сделать через TOP команду, ну как идея, а в Оракле этой команды нету!
получается сортировка у меня будет через
SQL
1
 ORDER BY Department_id
А вот как сделать сортировка по первым трем попавшимся департаментам я не знаю!
Нужно сделать так что бы ответ был в точности как в сообщений!
0
765 / 666 / 194
Регистрация: 24.11.2015
Сообщений: 2,163
01.11.2017, 21:47
Цитата Сообщение от MR_Clock Посмотреть сообщение
Я на SQL сервера, мог бы сделать через TOP команду, ну как идея, а в Оракле этой команды нету!
В Oracle есть аналитическая функция row_number(), которая более гибкая (на мой взгляд), чем TOP.
Подойдет ли следующий алгоритм?
Перебираем в порядке возрастания id всех сотрудников и смотрим, какие у них департаменты. Как только число департаментов стало равно три останавливаемся и из этих трех департаментов выдергиваем всех сотрудников опять же в порядке возрастания id.

Если этот алгоритм правильный, то подсказка - это бред сивой кобылы. Ну а какой ответ получится - зависит от того, как именно заполнили базу данных. Может быть для данной учебной базы ответ будет таким. На другой базе ответ может быть совершенно другой. Важна правильность алгоритма.
0
1 / 1 / 0
Регистрация: 01.11.2015
Сообщений: 211
01.11.2017, 21:50  [ТС]
AGK, Может и будет правильно, просто сама база HR она уже встроена была в Оракле когда я установил ее, работаю уже с готовой базой в оракле, поэтому ответ будет идентичным с сообщением с заданий! ! !
Я сам код не знаю как составить...
0
765 / 666 / 194
Регистрация: 24.11.2015
Сообщений: 2,163
01.11.2017, 22:35
SQL
1
2
3
4
5
6
7
8
9
10
11
WITH xx AS (
SELECT DISTINCT department_id 
FROM (
SELECT department_id, 
       COUNT(DISTINCT department_id) OVER (ORDER BY employee_id ROWS BETWEEN unbounded preceding AND CURRENT ROW) cnt
FROM employees
) WHERE cnt <=3 )
SELECT e.last_name, e.department_id 
FROM employees e, xx
WHERE e.department_id = xx.department_id 
ORDER BY e.employee_id
Думаю, что этот селект реализует изложенный выше алгоритм. К сожалению, попробовать не на чем, поэтому могут быть какие-то ошибки. Но надеюсь на лучшее.
0
93 / 71 / 33
Регистрация: 02.08.2015
Сообщений: 202
02.11.2017, 05:58
Здравствуйте!

Может быть вот это то, что нужно:

Oracle 11 SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
WITH
v_dept AS (
       SELECT DISTINCT department_id AS dept FROM employees
       WHERE ROWNUM < 4
)
 
SELECT
     e.last_name, e.first_name, e.department_id
FROM employees e, v_dept vd
WHERE
     vd.dept = e.department_id
ORDER BY 3
;
0
765 / 666 / 194
Регистрация: 24.11.2015
Сообщений: 2,163
02.11.2017, 09:59
orion2014, Ваш селект берет департаменты из первых трех встреченных сотрудников, а по условию требуется взять три первых встреченных департамента. Собственно, в примере и приводятся люди из трех департаментов. Если выполнить Ваш селект на этих данных, он вернет только три первые строки
0
1 / 1 / 0
Регистрация: 01.11.2015
Сообщений: 211
02.11.2017, 14:41  [ТС]
AGK, выдает ошибку !
ORA-30487: ORDER BY not allowed here
30487. 00000 - "ORDER BY not allowed here"
*Cause: DISTINCT functions and RATIO_TO_REPORT cannot have an ORDER BY
*Action:
Error at Line: 89 Column: 44

Типа ордер бу нельзя использовать с DISTINCT

Добавлено через 5 минут
AGK,
SQL
1
2
3
4
5
6
7
8
9
10
11
WITH xx AS (
SELECT DISTINCT department_id 
FROM (
SELECT DISTINCT department_id, 
       COUNT( department_id) OVER (ORDER BY employee_id ROWS BETWEEN unbounded preceding AND CURRENT ROW) cnt
FROM employees
) WHERE cnt <=10 )
SELECT e.first_name, e.department_id 
FROM employees e, xx
WHERE e.department_id = xx.department_id 
ORDER BY e.employee_id
Я не много подредактировал код, изменил
Oracle 11 SQL
1
COUNT( DISTINCT  department_id)
, поставил DISTINCT вперед SELECT, и вместо WHERE cnt <=3, сделал WHERE cnt <=10 , и он выдал в точно такое же ответ как в сообщение, ну я думаю я тут не много смухливал, но все же не правильный метод мне кажется!
Что то не хватает .

Добавлено через 25 минут
AGK, как это все сделать в Declare?
Просто должен это вывести типа сообщение, а не как запрос, то есть выдача ответа должен быть как сообщение!
0
1 / 1 / 0
Регистрация: 01.11.2015
Сообщений: 211
02.11.2017, 14:48  [ТС]
AGK, Пока что ответ такой получился
0
765 / 666 / 194
Регистрация: 24.11.2015
Сообщений: 2,163
02.11.2017, 15:30
Лучший ответ Сообщение было отмечено MR_Clock как решение

Решение

Не понял, почему Вы сделали <=10. Если у Вас говорится о трех департаментах, то это НЕВЕРНО, надо <=3

Вы, наверное, решили, что я ошибся и не там поставил DISTINCT. Это не так. В Oracle есть конструкция
count(distinct <имя поля>)

Теперь об ошибке.
Придется обмануть и реализовать count(distinct department_id) по-другому, отобрав предварительно по одному представителю для каждого департамента

Пожалуйста, запускайте мой селект как есть, не меняйте его

SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
WITH xx AS (
SELECT DISTINCT department_id 
FROM (
SELECT department_id, 
       COUNT( department_id) OVER (ORDER BY employee_id ROWS BETWEEN unbounded preceding AND CURRENT ROW) cnt
FROM ( 
SELECT department_id,  employee_id, ROW_NUMBER() OVER (partition BY  department_id ORDER BY employee_id) nn
FROM    employees
ORDER BY employee_id
) WHERE nn=1
) WHERE cnt <=3 )
SELECT e.first_name, e.department_id 
FROM employees e, xx
WHERE e.department_id = xx.department_id 
ORDER BY e.employee_id
1
1 / 1 / 0
Регистрация: 01.11.2015
Сообщений: 211
02.11.2017, 16:01  [ТС]
AGK, Да все правильно запустилось!

А как этот запрос вывести в declare? используя тип запись?
Выполните это же задание , используя тип запись.

Добавлено через 7 минут
AGK, Я не совсем понимаю что значит ТИП запись? Это имеется ввиду используя команду %TYPE?

Добавлено через 17 минут
AGK, Просто это задание еще не до конца выполнилось, мы получается выводим ответ не виде простого сообщение как это обычно выводится в Declare, а выводим виде запроса!
То есть я имею ввиду ответ такой
Сообщение должно выглядеть так: (Точно так же как в сообщение)
Steven 90
Neena 90
Lex 90
Alexander 60
Bruce 60
David 60
Valli 60
Diana 60
Nancy 100
Daniel 100
John 100
Ismael 100
Jose Manuel 100
Luis 100
0
765 / 666 / 194
Регистрация: 24.11.2015
Сообщений: 2,163
02.11.2017, 18:40
Лучший ответ Сообщение было отмечено MR_Clock как решение

Решение

Цитата Сообщение от MR_Clock Посмотреть сообщение
Я не совсем понимаю что значит ТИП запись?
Я подозреваю, что от Вас хотят переменной типа RECORD.

То есть, нужно сделать из селекта курсор и фетчить в цикле данные, но не просто в переменную, а в переменную типа RECORD, чтобы фетчились сразу две (или более) компоненты

Добавлено через 1 час 2 минуты
Что такое, наверное, надо сочинить

SQL
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
27
28
29
30
31
32
33
34
DECLARE
   TYPE type_rec IS
   record(
          l_n      hr.employees.last_name%TYPE,
          d_id    hr.employees.department_id%TYPE
          );
   v_rec      type_rec ;
 
   cursor c IS
  WITH xx AS (
  SELECT DISTINCT department_id 
  FROM (
  SELECT  department_id, 
*   * * *COUNT( department_id) OVER (ORDER BY employee_id ROWS BETWEEN unbounded preceding AND CURRENT ROW) cnt
  FROM ( 
  SELECT department_id, *employee_id, ROW_NUMBER() OVER (partition BY *department_id ORDER BY employee_id) nn
  FROM * *employees
  ORDER BY employee_id
  ) WHERE nn=1
  ) WHERE cnt <=3 )
  SELECT e.first_name, e.department_id 
  FROM employees e, xx
  WHERE e.department_id = xx.department_id 
  ORDER BY e.employee_id;
 
BEGIN
   OPEN c;
   loop
       fetch c INTO v_rec;
       exit WHEN c%notfound;
       dbms_output.put_line(v_rec.l_n||'   '||v_rec.d_id);
   END loop;
   close c;
END;
1
1 / 1 / 0
Регистрация: 01.11.2015
Сообщений: 211
02.11.2017, 18:49  [ТС]
AGK, получается этот код нужно подстроить под ваш селект?
0
765 / 666 / 194
Регистрация: 24.11.2015
Сообщений: 2,163
02.11.2017, 18:54
Цитата Сообщение от MR_Clock Посмотреть сообщение
код нужно подстроить под ваш селект?
При работе с базами данных мы практически всегда опираемся на тот или иной селект. А все дальнейшее зависит от цели, вкуса и политических убеждений
1
1 / 1 / 0
Регистрация: 01.11.2015
Сообщений: 211
02.11.2017, 19:17  [ТС]
AGK, выдает новую ошибку, типа отсутствует выражение
Error report -
ORA-06550: line 9, column 31:
PL/SQL: ORA-00936: missing expression
ORA-06550: line 6, column 3:
PL/SQL: SQL Statement ignored
06550. 00000 - "line %s, column %s:\n%s"
*Cause: Usually a PL/SQL compilation error.
*Action:

Добавлено через 13 минут
AGK, извиняюсь, уже исправил!
0
765 / 666 / 194
Регистрация: 24.11.2015
Сообщений: 2,163
02.11.2017, 19:27
Цитата Сообщение от MR_Clock Посмотреть сообщение
выдает новую ошибку
Да, я видел, что Вы исправили. Но там затесались какие-то звёздочки непонятно откуда при копи-пасте. Уберите перед COUNT, может быть, в этом дело.
И еще какие-то звёздочки где-то в районе from employees
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
02.11.2017, 19:27
Помогаю со студенческими работами здесь

Вывести в новый файл информацию о студентах, успешно сдавших сессию, отсортировав по номеру группы
На основе данных входного файла составить список студентов группы, включив следующие данные: ФИО, номер группы, результаты сдачи трех...

По номеру отдела выдать информацию обо всех его сотрудниках
Всем, доброго времени суток. Ребята, пошел на заочку в институт и приплыл на лабе. Как делать не знаю, если кто-нибудь может помочь, я буду...

По номеру машины выведите всю информацию о ней
Помогите решить плз. Сведения о каждой машине включает в себя следующую информацию: модель (строка длиной 10 символов), номер (код...

Вывести в output.txt информацию, отсортировав ее по количеству продукции на складе
Здравствуйте! Нужна помощь в сортировке. Я сделал считывание данных из файла и вывод в listView, а вот отсортировать по количеству (и...

В записях создать информацию о сотрудниках
В записях создать информацию о сотрудниках : ФИО, дата рождения, должность, оклад, стаж работы. Вывести в таблицу ФИО, должность, оклад....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru