Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Работа Новый топик    Ответить
 SQL - Tasks  [new]
Anastasia999
Member

Откуда:
Сообщений: 6
Здравствуйте!

Вот текст задачи:
--SQL Task: MS-6.4
/*
Назовем средним сроком службы по подразделению среднее число дней службы на
текущий момент всех военнослужащих, приписанных к этому подразделению и ко всем
его дочерним подразделениям (до нижнего уровня).
Вывести название самого "старшего" подразделения, а также средний срок службы по
подразделению, округленный до дней. В случае, если таких подразделений более
одного, ограничить вывод первым.
Примечание. Эту задачу можно решить по аналогии с задачей MS-6.3, но типичная
ошибка усреднения в MS-6.3 не влияет на результат, а в данной задаче - влияет.
*/
Вот решение:
SELECT *
FROM
(
SELECT tt.name, TRUNC(AVG(TO_DATE(SYSDATE)-TO_DATE(tt.consc_date))) AS period
FROM
(
SELECT CONNECT_BY_ROOT t.name as name, t.consc_date
FROM
(
SELECT mu.*, s.consc_date
FROM military_units mu
LEFT JOIN staff s
ON mu.unit_id = s.unit_id
WHERE s.consc_date IS NOT NULL
) t
--START WITH t.parent_id IS NULL
CONNECT BY PRIOR t.unit_id = t.parent_id
) tt
GROUP BY tt.name
HAVING COUNT(tt.consc_date) > 0
ORDER BY period DESC
)
WHERE ROWNUM = 1

Система автоматической проверки не принимает решение. Не могу понять, почему. Прилагаю схему. Заранее спасибо.

К сообщению приложен файл. Размер - 31Kb
11 авг 16, 23:15    [19531931]     Ответить | Цитировать Сообщить модератору
 Re: SQL - Tasks  [new]
ЕвгенийВ
Member

Откуда: Москва
Сообщений: 4377
О чудная женская логика!
Не подвела с выбором форума :)
12 авг 16, 10:24    [19532820]     Ответить | Цитировать Сообщить модератору
 Re: SQL - Tasks  [new]
kernA
Member

Откуда: Санкт-Петербург
Сообщений: 246
ЕвгенийВ, это тестовое задание)
12 авг 16, 11:06    [19533022]     Ответить | Цитировать Сообщить модератору
 Re: SQL - Tasks  [new]
Anastasia999
Member

Откуда:
Сообщений: 6
ЕвгенийВ, Ваш комментарий мне сильно помог:) Ну вообще это тестовое задание. ЧИТАЙТЕ ВНИМАТЕЛЬНЕЕ.
12 авг 16, 13:46    [19534139]     Ответить | Цитировать Сообщить модератору
 Re: SQL - Tasks  [new]
Fogel
Member

Откуда:
Сообщений: 267
CONNECT BY PRIOR t.unit_id = t.parent_id 

поменяйте местами поля, у вас обход идёт снизу вверх, а по условию, надо сверху вниз
и
--START WITH t.parent_id IS NULL

тогда раскомментируйте
12 авг 16, 14:05    [19534281]     Ответить | Цитировать Сообщить модератору
 Re: SQL - Tasks  [new]
schi
Member

Откуда: Москва
Сообщений: 2357
Anastasia999
Ну вообще это тестовое задание. ЧИТАЙТЕ ВНИМАТЕЛЬНЕЕ.


Кого тестируем, участников форума ? А смысл в этом тестировании ?
Если же это вас тестируют, то предполагается самостоятельный ответ на задания, не так ли ?
13 авг 16, 10:30    [19536761]     Ответить | Цитировать Сообщить модератору
 Re: SQL - Tasks  [new]
Anastasia999
Member

Откуда:
Сообщений: 6
schi, меня тестируют. Я просто прошу помощи. Нельзя?
13 авг 16, 18:12    [19537283]     Ответить | Цитировать Сообщить модератору
 Re: SQL - Tasks  [new]
wadman
Member

Откуда: Санкт-Петербург
Сообщений: 23234
Anastasia999,

можно, но перед этим крайне деллательно ознакомиться с темой http://www.sql.ru/forum/941371/studentam-zhelaushhim-pomoshhi
13 авг 16, 20:11    [19537446]     Ответить | Цитировать Сообщить модератору
 Re: SQL - Tasks  [new]
Anastasia999
Member

Откуда:
Сообщений: 6
Fogel, все равно неверно (((
13 авг 16, 21:41    [19537685]     Ответить | Цитировать Сообщить модератору
 Re: SQL - Tasks  [new]
АНТ
Member

Откуда: Москва
Сообщений: 124
Anastasia999
Fogel, все равно неверно (((

тут Вам без фотки не помогут.
29 авг 16, 17:25    [19603825]     Ответить | Цитировать Сообщить модератору
 Re: SQL - Tasks  [new]
Farm5676511
Member

Откуда:
Сообщений: 2
Тоже эту задачу делаю
если рассмотреть часть решения

select * from (
SELECT CONNECT_BY_ROOT t.name as name, t.consc_date
FROM
(
SELECT mu.*, s.consc_date
FROM military_units mu
LEFT JOIN staff s
ON mu.unit_id = s.unit_id
WHERE s.consc_date IS NOT NULL
) t

--START WITH t.parent_id IS NULL
CONNECT BY PRIOR /*t.parent_id=*/ t.unit_id =t.parent_id)

то видно, что пропускается platoon #5 так как в нем нет сотрудников, а значит теряется squad #6 который ссылается на platoon #5

вы решили эту задачу?
3 окт 16, 19:54    [19739058]     Ответить | Цитировать Сообщить модератору
 Re: SQL - Tasks  [new]
DaniilSeryi
Member

Откуда:
Сообщений: 868
Да на sql-ex не базы, а г@#$о, проходить их тесты - себя не уважать.
3 окт 16, 21:15    [19739324]     Ответить | Цитировать Сообщить модератору
 Re: SQL - Tasks  [new]
Farm5676511
Member

Откуда:
Сообщений: 2
DaniilSeryi,
Там еще такая проблема что когда по этой таблице все средние считаешь, то все неверно. Нужен create view этой таблицы. Как подсчитать верно если create view не дают использовать?
4 окт 16, 00:19    [19739748]     Ответить | Цитировать Сообщить модератору
Между сообщениями интервал более 1 года.
 Re: SQL - Tasks  [new]
eess9
Member

Откуда:
Сообщений: 2
Успешно решил я эту задачу, хотя, честно сказать, это было не просто. Там очень витиевато написано задание и ни хрена ни сразу доезджаешь, что нужно сделать. Поскольку код решения сохраняется в системе, то сюда выкладывать его я побаиваюсь (чтобы не спалили создатили теста, т.к. это, по факту, задания на прием на работу). но опишу решение словесно. Требование вывести самого "старшего" подразделения оказывается означает, что надо вывести подразделение, где средний срок службы самый большой с учетом всех подчиненных подразделений, а не самое главное подразделение в иерархии. В таблице military_units 14 строк. Выводим все строки. Далее для каждой строки иерархическим подзапросом находим средний срок службы с учетом подчиненных подразделений (для этого и иерархический).
А фраза из примечания задания "Эту задачу можно решить по аналогии с задачей MS-6.3, но типичная
ошибка усреднения в MS-6.3 не влияет на результат, а в данной задаче - влияет." означает, что так TO_DATE(SYSDATE)-TO_DATE(staff.consc_date) делать нельзя. Не в коем случае не укорачиваем текущий временной штамп до даты, т.к. это и будет наша ошибка усреднения. Только так SYSDATE - staff.consc_date, т.к. оба - временные штампы.
А уже в самом конце делаем round() нашего усредненного значения. Не floor() как просили в предыдущем задании MS-6.3. Пусть это вас не сбивает с толку. Округляем по всем математическим правилам.
Правильное подразделение Platoon #4, а средний срок будет зависеть от текущей даты и каждый раз будет разный (ибо текущее всемя - staff.consc_date).
1 дек 17, 16:05    [20998905]     Ответить | Цитировать Сообщить модератору
 Re: SQL - Tasks  [new]
Щупа Щупс
Member

Откуда:
Сообщений: 1863
Anastasia999
schi, меня тестируют. Я просто прошу помощи. Нельзя?


А вам сколько лет? Вы красивая, фигуристая?

ТО что умная уже видно по тесту.
1 дек 17, 16:21    [20998964]     Ответить | Цитировать Сообщить модератору
 Re: SQL - Tasks  [new]
eess9
Member

Откуда:
Сообщений: 2
Щупа Щупс
ТО что умная уже видно по тесту.
Ну походу не решила и не приняли ее на работу. Задания там простые, только написаны очень расплывчато. Не сразу въедишь чего хотят, чтобы ты из базы вытянул.
Пример из этого задания: фраза "типичная ошибка усреднения" сразу же повергла меня и google в ступор. Понятно, что понимание этой фразы важно для успешного решения, но что это такое хз. Так и не нашел я определения так какая же ошибка усреднения является типичной. Видимо составилели веселились.
1 дек 17, 17:11    [20999141]     Ответить | Цитировать Сообщить модератору
 Re: SQL - Tasks  [new]
buser
Member

Откуда: Санкт-Петербург
Сообщений: 4074
eess9, в неткрякере автотестируют?
1 дек 17, 17:41    [20999214]     Ответить | Цитировать Сообщить модератору
Все форумы / Работа Ответить