Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.04.09;
Скачать: CL | DM;

Вниз

В очередной раз рискну разместить здесь вакансию   Найти похожие ветки 

 
paul_k ©   (2006-03-16 09:36) [160]

> [159] Bless ©   (16.03.06 09:07)

я давал из расчета 15-20 минут на задачу. В распоряжении кандидата только голова, бумага и ручка.


 
Курдль ©   (2006-03-16 09:36) [161]


> Nikolay M. ©   (15.03.06 18:36) [147]


Мне бы Ваши проблемы! :)
Т.е. Вы оцениваете степень мастерства претендента по его умению выжать последние крохи быстродействия из SQL сервера? :)


 
Igorek ©   (2006-03-16 09:48) [162]


> Т.е. Вы оцениваете степень мастерства претендента по его
> умению выжать последние крохи быстродействия из SQL сервера?
>  :)

А что, имхо, это и есть один из самых адекватных показателей. Тем более, что по данной вакансии это входит в круг обязанностей.


 
paul_k ©   (2006-03-16 09:50) [163]

> [161] Курдль ©   (16.03.06 09:36)

Наоборот. Не "выжать", а "не положить".
При больших объемах данных криво написанный запрос легко может уложить любой сервер. Потери от получасового простоя сервера скажем фронтофиса, или опердня могут быть очень велики. Сажать над каждым програмистом контролера - а оно надо?. Следовательно ищутся люди у которых навыки правилного написания запросов просто "вросли в пальцы". Как мне кажется, от такого программиста ни один работодатель не откажется:)


 
Курдль ©   (2006-03-16 10:13) [164]


> Igorek ©   (16.03.06 09:48) [162]


> paul_k ©   (16.03.06 09:50) [163]


Спасибо.


 
Nikolay M. ©   (2006-03-16 10:15) [165]


> Bless ©   (16.03.06 09:07) [159]
> И еще, когда опубликуешь, напиши, сколько времени на эти
> задачки дается, пожалуйста.
> Бум ждать.


Это заочная задачка, дособеседовательная. Например, один кандидат прислал вариант с кучей SELECT FROM SELECT и не учел даже половины условий из задачи, хотя я вполне допускал, что некоторые моменты могут быть поняты неоднозначно из-за незнания предметной области и был готов закрыть на это глаза. Ввиду его завышенных пожеланий к зарплате, собеседование так и не состоялось, что сэкономило время нам обоим.
Задачку придумал на коленке, вечером, за 15 минут, она очень приближена к боевым условиям. Сам я ее не решал :)


 
Sandman25 ©   (2006-03-16 10:19) [166]

Nikolay M. ©   (16.03.06 10:15) [165]

Сам я ее не решал :)

и вообще решить не могу :)


 
Nikolay M. ©   (2006-03-16 10:20) [167]


> Igorek ©   (16.03.06 09:48) [162]
> paul_k ©   (16.03.06 09:50) [163]


Угу, все правильно. Тем более, что умение написать быстрый запрос - это всего лишь вершина айсберга, но по которой можно судить о том, что кандидат знает об устройствах индексов, что такое HAVING да и вообще, стиль написания скриптов может о многом сказать.


 
Nikolay M. ©   (2006-03-16 10:21) [168]


> Sandman25 ©   (16.03.06 10:19) [166]
> и вообще решить не могу :)


Мне ежедневно приходится писать гораздо более сложные запросы :(


 
Sandman25 ©   (2006-03-16 10:23) [169]

Nikolay M. ©   (16.03.06 10:21) [168]

Разве это плохо? Хотя, конечно, если действительно каждый день...


 
Курдль ©   (2006-03-16 10:25) [170]


> Nikolay M. ©   (16.03.06 10:15) [165]


Интересно, а как Вы оценили бы кандидата, пишущего такие запросы:


select A.A_ID, A.A_NAME, D.D_NAME,
(select sum(B.B_SUMMA) from B where B.A_ID = A.A_ID) as B_SUMMA,
(select sum(C.C_SUMMA) from C where C.A_ID = A.A_ID) as C_SUMMA,
from A left outer join (D, E, F) on D.A_ID = A.A_ID and E.D_ID = D.D_ID and F.E_ID = E.E_ID
?

Это важно, поскольку у старых ораклистов и мускулистов разные подходы к таким запросам.


 
Nikolay M. ©   (2006-03-16 10:29) [171]


> Sandman25 ©   (16.03.06 10:23) [169]
> Разве это плохо? Хотя, конечно, если действительно каждый
> день...


Нет, не плохо, но бывает, что немного надоедает :)


 
Danilka ©   (2006-03-16 10:33) [172]

[170] Курдль ©   (16.03.06 10:25)
запрос нерабочий :)


 
Nikolay M. ©   (2006-03-16 10:36) [173]


> Курдль ©   (16.03.06 10:25) [170]
> Интересно, а как Вы оценили бы кандидата, пишущего такие
> запросы:


Никак. Это PL/SQL, а я не знаю, насколько оптимально выполнение такого запроса ораклом. Встречал мнение, что разбиение большого страшного запроса, как это любят делать в MS SQL, в оракле не годится - вроде, оракл любит самостоятельно разруливать именно многоэтажные запросы с кучей подзапросов, джойнов и тд. Возможно, я ошибаюсь.


 
paul_k ©   (2006-03-16 10:57) [174]

> [170] Курдль ©   (16.03.06 10:25)

Без условий задачи оценить решение? мдя...
если чесно, то увидев таблицы A,B,C,D - послал бы такого кандидата не взирая на звания и регалии и все прочее.. Ибо если человет какие псевдонимы таблицам дает - то явно не сработаемся.


 
Nikolay M. ©   (2006-03-16 10:58) [175]


> paul_k ©   (16.03.06 10:57) [174]
> если чесно, то увидев таблицы A,B,C,D


Это пример :)


 
Danilka ©   (2006-03-16 11:00) [176]

[173] Nikolay M. ©   (16.03.06 10:36)
это не пл/скл, а незнамо что такое. :)
по-крайней мере и mssql и орокол на такой синтаксис: join (D, E, F) ругаюцца.


 
Nikolay M. ©   (2006-03-16 11:05) [177]


> Danilka ©   (16.03.06 11:00) [176]
> по-крайней мере и mssql и орокол на такой синтаксис: join
> (D, E, F) ругаюцца.


Где-то я точно видел такой синтаксис.
О, кажется, Курдль как-то писал...


 
Игорь Шевченко ©   (2006-03-16 11:15) [178]

Курдль ©   (16.03.06 10:25) [170]


> Интересно, а как Вы оценили бы кандидата, пишущего такие
> запросы:


Я бы плохо оценил. Не вдаваясь в суть запроса, только по слову "SUMMA"


 
paul_k ©   (2006-03-16 11:20) [179]

> [175] Nikolay M. ©   (16.03.06 10:58)
> Это пример :)

Нет это привычка, "вросшая в пальцы" :))


 
Курдль ©   (2006-03-16 11:20) [180]


> Nikolay M. ©   (16.03.06 10:36) [173]
> Никак. Это PL/SQL


Нет. Это чистый ANSI.

> paul_k ©   (16.03.06 10:57) [174]
> если чесно, то увидев таблицы A,B,C,D - послал бы такого кандидата

Как правильно сказал Nikolay M., это общепринятая форма написания примеров. Так что поостереглись бы посылать кого не попадя :)


> Danilka ©   (16.03.06 11:00) [176]
> по-крайней мере и mssql и орокол на такой синтаксис: join
> (D, E, F) ругаюцца.


MS SQL должен сожрать, раз его старший брат Sybase ASA съедает.
А оракл, старше 9го, съедает с доработкой типа внутри скобок (D inner join F on F.D_ID = D._D_ID и т.д.)


 
Курдль ©   (2006-03-16 11:24) [181]


> Игорь Шевченко ©   (16.03.06 11:15) [178]
> Я бы плохо оценил. Не вдаваясь в суть запроса, только по
> слову "SUMMA"


Забавно. Во-первых, не "SUMMA", а "В_SUMMA". И что Вы имеете против, если поле действительно означает сумму? Это не противоречит ни спецификации, ни рекомендованным стилям. А вот назвать поле "SUM" было бы и вправду трагично...


 
Nikolay M. ©   (2006-03-16 11:25) [182]


> Курдль ©   (16.03.06 11:20) [180]
> Нет. Это чистый ANSI.


Не поверю до тех пор, пока не залезу в стандарт и не увижу такую форму записи.

SELECT *
FROM
 sysalerts
LEFT OUTER JOIN (syscategories, sysjobs) ON 1=2

Server: Msg 170, Level 15, State 1, Line 4
Line 4: Incorrect syntax near ",".


 
Курдль ©   (2006-03-16 11:26) [183]


> Danilka ©   (16.03.06 10:33) [172]
>
> [170] Курдль ©   (16.03.06 10:25)
> запрос нерабочий :)
>


Разве что из-за запятой перед "from"


 
Курдль ©   (2006-03-16 11:30) [184]


> Nikolay M. ©   (16.03.06 11:25) [182]
> Не поверю до тех пор, пока не залезу в стандарт и не увижу
> такую форму записи.


Тогда посыпаю голову пеплом и забираю свои слова про "чистый ANSI" :(
Интересно, а как бы Вы реализовали мой пример на TSQL? Или на чем бы то ни было, но чтобы он корректно отработал на MS SQL?..


 
paul_k ©   (2006-03-16 11:35) [185]

> это общепринятая форма написания примеров

да??? ГОСТ в студию. Или норму опубликованую. :)
Мне всеже казалось что примеры пишуть TableA,TableB, ViewC и так далее.
Опять же  - у каждого свои взгляды..

> Интересно, а как бы Вы реализовали мой пример на TSQL?

Условие задачи где?. Было бы  - легко реализовали бы:)


 
Danilka ©   (2006-03-16 11:37) [186]

[180] Курдль ©   (16.03.06 11:20)
Если "раскрыть скобки", то, таки да, съест и орокол старше 9-ки и mssql.
Но даже если все открячить, выкинуть лишние соединения, или добавить их обработку в секцию select, то, цитирую: "Без условий задачи оценить решение?".


 
Курдль ©   (2006-03-16 11:37) [187]


> paul_k ©   (16.03.06 11:35) [185]
> Условие задачи где?. Было бы  - легко реализовали бы:)

Ок! :)
Если Вам не лениво будет решить, я не поленюсь составить условие :)


 
Nikolay M. ©   (2006-03-16 11:39) [188]


> Курдль ©   (16.03.06 11:30) [184]
> Тогда посыпаю голову пеплом и забираю свои слова про "чистый
> ANSI" :(


Да уж. Просто АНСИ - это очень убогий стандарт, поэтому был очень удивлен таким заявлением.

В том примере LEFT JOIN (A, B, C) элементарно разворачивается в 3 JOIN-а:

FROM a
LEFT JOIN A ON ...
LEFT JOIN B ON ...
LEFT JOIN C ON ...


Вот такая форма, если не ошибаюсь, уже будет соответствовать ANSI, а подзапросы суммирования в части SELECT - нет.


 
Курдль ©   (2006-03-16 11:51) [189]

Условие задачи.

Существуют следующие таблицы:
A - договор
B - заявка, относящаяся к договору, как "много-к-одному"
C - платежка, относящаяся к договору, как "много-к-одному"
D - расчетный счет, относящийся к договору, как "один-к-одному"
E - распорядитель (юр. лицо), относящийся к счету, как "один-ко-многим"
F - субъект, относящийся к распорядителю, как "один-ко-многим"

Надо составить набор данных из договоров, с указанием общей суммы заявок и общей суммы платежек по каждому и (если таковые есть) наименованиями получателей(юр. лицами), указанными в р/с договора.
(Поле "наименование" имеется только у таблицы F).

Надеюсь, не ошибся в своем "реверс-инжиниринге" :)


 
Danilka ©   (2006-03-16 12:10) [190]

1.
A - договор
...
D - расчетный счет, относящийся к договору, как "один-к-одному"

а нафига?

2. Необходимы все договора, в т.ч. и те, по которым небыло ниодной заявки/платежки?
3. Нафига в твоем запросе внешние соединения, если он для решения данной задачи?
ну и т.д.


 
Danilka ©   (2006-03-16 12:13) [191]

или договор м.б. без р/с, распорядителя и субъекта?


 
Курдль ©   (2006-03-16 12:20) [192]


> 2. Необходимы все договора, в т.ч. и те, по которым небыло
> ниодной заявки/платежки?


Да. Пусть будет так.


> 3. Нафига в твоем запросе внешние соединения, если он для
> решения данной задачи?

В договоре может быть и не указан счет. Тогда как без внешних соединений?
Читай: "...и (если таковые есть) наименованиями получателей

"


 
Nikolay M. ©   (2006-03-16 12:29) [193]

Ни разу не возражаю против развернувшегося оффтопа, но все-таки хотелось бы обратить внимание на сабж.

Прием резюме еще не окончен.


 
Курдль ©   (2006-03-16 13:05) [194]

Чё притихли? Мож у меня тоже вакансия есть?! :)

Упрощаю задачу - не поленился нарисовать модель, хоть и не совсем по первоначальному моему запросу: http://www.kurdl.h15.ru/pages/pictures/diagram.gif


 
Danilka ©   (2006-03-16 13:31) [195]

[193] Nikolay M. ©   (16.03.06 12:29)
> Ни разу не возражаю против развернувшегося оффтопа

это хорошо :)


> но все-таки хотелось бы обратить внимание на сабж.

дык, воть, ветку поднимаем, глядишь, кто и заинтересуецца. :)

[194] Курдль ©   (16.03.06 13:05)
как я понял, надо 4 поля: id договора, два поля с суммами по заявкам/оплатам и еще одно - наименование субъекта, так? и в чем проблема-то? простейшая задачка. если по наименованию субъекта не требуется фильтрация/сортировка, то яб вообще взял селект из таблицы договоров и три подзапроса, два считаюших суммы, третий вытаскивающий субъекта.


 
Курдль ©   (2006-03-16 13:36) [196]


> яб вообще взял селект из таблицы договоров и три подзапроса,
>  два считаюших суммы, третий вытаскивающий субъекта.


А почему третий - подзапрос, а не внешнее соединение?


 
Danilka ©   (2006-03-16 13:41) [197]

[196] Курдль ©   (16.03.06 13:36)
А нафига мне тормоза? :))


 
Курдль ©   (2006-03-16 13:43) [198]


> Danilka ©   (16.03.06 13:41) [197]


А где написано, что внешнее соединение тормознутее подзапроса?

И мне интересно все-таки, как будет выглядеть такой запрос на MS SQL?


 
Nikolay M. ©   (2006-03-16 13:44) [199]


> Danilka ©   (16.03.06 13:31) [195]
> дык, воть, ветку поднимаем, глядишь, кто и заинтересуецца.  :)


Так потому и не возражаю :)


 
Igorek ©   (2006-03-16 14:13) [200]


> Курдль ©   (16.03.06 11:51) [189]

Типа такого:
select
o.*,
r.OrderRequestAmount,
p.OrderPaymentAmount,
jp.jpName
from A as o
left join (
select
 sum(Amount) as OrderRequestAmount,
 orderID
from B
group by orderID
) as r on o.ID = r.orderID
left join (
select
 sum(Amount) as OrderPaymentAmount,
 orderID
from C
group by orderID
)  as p on o.ID = p.orderID
left join (
select
 ac.orderID,
 jp.[Name] as jpName
from D as ac
left join E as jp on ac.ID = jp.accountID
) as jp on o.ID = jp.orderID



Страницы: 1 2 3 4 5 6 вся ветка

Текущий архив: 2006.04.09;
Скачать: CL | DM;

Наверх




Память: 0.83 MB
Время: 0.056 c
2-1143143263
Flint-1983
2006-03-23 22:47
2006.04.09
Ошибка


15-1142840700
Kuprin
2006-03-20 10:45
2006.04.09
Может кто сталкивался Ошибка DataBase Desktop


1-1141328534
Serafim-ss
2006-03-02 22:42
2006.04.09
Marquee progress bar как в эсплорере


1-1141382533
Alex007
2006-03-03 13:42
2006.04.09
отладка dll в Delphi6


1-1141461972
Kristmas
2006-03-04 11:46
2006.04.09
DragDrop в Virtual VistView