PDA

View Full Version : Вопрос на засыпку



смешно
05-02-2013, 03:24 PM
мне тут задали вопрос на телефонном интервью, довольно неожиданный, но интересный. подумал 30 секунд и дал ответ, хотя вариантов ответа на него несколько. как оказалось, что мой ответ оказался самым интересным и самым правильным, никто до меня не давал такой ответ, после моего ответа мне перестали задавать технические вопросы и пригласили на face to face интервью. прикольное, что после интервью я погуглил интернет и не нашёл моего ответа. ЛОЛ



Oracle Database

вопрос:

Find second largest value in the column AMOUNT for TABLE A. надо составить query.


Good luck! вам даётся 30 секунд. :)

MariLi
05-02-2013, 03:29 PM
какой-нибудь макс вер меньше чем мах...

смешно
05-02-2013, 03:43 PM
lol, жду ответа.

MariLi
05-02-2013, 03:48 PM
lol, жду ответа.

ну да ... уже погуглила, есть такой...
не томи... колись :1:

смешно
05-02-2013, 03:49 PM
давай подождём что-бы остальные участники подумали. :)

MariLi
05-02-2013, 03:53 PM
ну давай... :)

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

реднек
05-02-2013, 03:54 PM
мне тут задали вопрос на телефонном интервью, довольно неожиданный, но интересный. подумал 30 секунд и дал ответ, хотя вариантов ответа на него несколько. как оказалось, что мой ответ оказался самым интересным и самым правильным, никто до меня не давал такой ответ, после моего ответа мне перестали задавать технические вопросы и пригласили на face to face интервью. прикольное, что после интервью я погуглил интернет и не нашёл моего ответа. ЛОЛ



Oracle Database

вопрос:

Find second largest value in the column AMOUNT for TABLE A. надо составить query.


Good luck! вам даётся 30 секунд. :)

select * from (select * from a order by amount desc limit 2) order by amount asc limit 1

реднек
05-02-2013, 03:54 PM
Не проверял, первое что пришло в голову.

смешно
05-02-2013, 04:03 PM
а ты проверь, это первое, а второе допустим два или три самых largest has the same value, a надо найти second largest. т.е. 800 из этого примера. :)

1000
1000
1000
800
700
600
500
100
1
0.5
0
....

смешно
05-02-2013, 04:05 PM
блин какой я умный, даже сам не верю. :)

IggyPop
05-02-2013, 04:08 PM
а ты проверь, это первое, а второе допустим два или три самых largest has the same value, a надо найти second largest. т.е. 800 из этого примера. :)

1000
1000
1000
800
700
600
500
100
1
0.5
0
....

DISTINCT

реднек
05-02-2013, 04:08 PM
блин какой я умный, даже сам не верю. :)

selet * from A where AMOUNT < (select max(AMOUNT) from A) order desc limit 1

Опять не проверял

смешно
05-02-2013, 04:08 PM
ответ давай! конкретный.

реднек
05-02-2013, 04:14 PM
ответ давай! конкретный.

Ну проверил:
select * from A where AMOUNT < (select max(AMOUNT) from A) order by AMOUNT desc limit 1;

Нашло все правильно.

смешно
05-02-2013, 04:18 PM
Ну проверил:
select * from A where AMOUNT < (select max(AMOUNT) from A) order by AMOUNT desc limit 1;

Нашло все правильно.

да это работает, но есть ещё проще решение. моё решение. :)

Dova
05-02-2013, 04:20 PM
лол, жду ответа.

минус 1
или- плюс один
в зависимости в какую сторону они ищут )

смешно
05-02-2013, 04:21 PM
минус 1
или- плюс один
в зависимости в какую сторону они ищут )

они не идут, на месте стоят. :)

Dova
05-02-2013, 04:22 PM
COUNT еще нужен

лол.вы не ругайтесь
самой интересно стало
но сто лет не делал ничего подобногo

Baba_Yaga
05-02-2013, 04:22 PM
да это работает, но есть ещё проще решение. моё решение. :)

Смешно, ты оказывается не только самый богатый, но и самый умный! Одно не пойму: зачем миллионер на позицию софтвер девелопера иньервьюируется?

реднек
05-02-2013, 04:24 PM
То что оракл, это существенно?

Dova
05-02-2013, 04:24 PM
они не идут, на месте стоят. :)

а следующий- на ступень выше или на ступень ниже?
если тебе не нравится, как они бегают
...неточня спецификация ))


пиши уже.мне лeнь тебя читать )

смешно
05-02-2013, 04:26 PM
ок. ответ будет завтра. дам возможность всем подумать. РедНек ответил правильно, но вопрос был найти конкретный amount, а не всё row.

смешно
05-02-2013, 04:28 PM
Смешно, ты оказывается не только самый богатый, но и самый умный! Одно не пойму: зачем миллионер на позицию софтвер девелопера иньервьюируется?

а мне интересно мозги иногда напрягать.

смешно
05-02-2013, 04:33 PM
какой-нибудь макс вер меньше чем мах...

на самом деле это очень точное определение. молодец.

Dova
05-02-2013, 04:42 PM
плин
поверили
в интернете ответов- завались на эту тему ))))))))))

abc
05-02-2013, 05:09 PM
Вот что нашел на интернете:

SELECT * FROM table_name WHERE column_name IN (SELECT MAX(column_name) FROM table_name WHERE column_name <> (SELECT MAX(column_name) FROM table_name))

смешно
05-03-2013, 06:49 AM
ок. the simplest and most logical answer ( not related to any database):


select max(amount) from table A where amount != (select max(amount) from table A)

this one also will work:

select max(amount) from table A where amount < (select max(amount) from table A)

crazy-mike
05-03-2013, 07:18 AM
какой-нибудь макс вер меньше чем мах...

select max(a) from abc where a< (select max(a) from abc);

:111:
( бир микс Cuba Libre 6-градусное )

create table abc ( a integer primary key);
insert into abc values (9),(8),(7),(6),(5),(4),(3),(2),(1),(0);
select max(a) from abc where a< (select max(a) from abc);

:111:
( это Oracle MySQL 5.* )

crazy-mike
05-03-2013, 07:29 AM
Вот что нашел на интернете:

SELECT * FROM table_name WHERE column_name IN (SELECT MAX(column_name) FROM table_name WHERE column_name <> (SELECT MAX(column_name) FROM table_name))

лучше ничего там не ищи - опасно для психического здоровья. :111:

Miami Vice
05-03-2013, 07:40 AM
Смешно, ты оказывается не только самый богатый, но и самый умный! Одно не пойму: зачем миллионер на позицию софтвер девелопера иньервьюируется?

Это для него "и ещё буду немного шить ночью". :111:

реднек
05-03-2013, 08:11 AM
ок. the simplest and most logical answer ( not related to any database):


select max(amount) from table A where amount != (select max(amount) from table A)

this one also will work:

select max(amount) from table A where amount < (select max(amount) from table A)

Теперь буду знать как отвечать чтобы скипали телефонное. А то мурыжат почем зря.

смешно
05-03-2013, 08:44 PM
Теперь буду знать как отвечать чтобы скипали телефонное. А то мурыжат почем зря.

им сразу задай этот вопрос. Лол

MariLi
05-04-2013, 12:41 AM
:314:

Alex5448
05-04-2013, 09:39 AM
Хинди надо учить, не сиквел.

ETTY
05-06-2013, 05:17 AM
ок. the simplest and most logical answer ( not related to any database):


select max(amount) from table A where amount != (select max(amount) from table A)

this one also will work:

select max(amount) from table A where amount < (select max(amount) from table A)

Да, все просто, но ответ Реднека более техничен и универсален. Если попросят найти 3-й.... N-й по величине, то твой ответ обломится, а ответ Реднека - нет.

смешно
05-08-2013, 12:08 PM
Да, все просто, но ответ Реднека более техничен и универсален. Если попросят найти 3-й.... N-й по величине, то твой ответ обломится, а ответ Реднека - нет.

мой не обломится. подумай хорошо.

смешно
05-08-2013, 01:23 PM
Да, все просто, но ответ Реднека более техничен и универсален. Если попросят найти 3-й.... N-й по величине, то твой ответ обломится, а ответ Реднека - нет.


это вообще не будет работать если больше чем 2, нужна другая логика.

select * from A where AMOUNT < (select max(AMOUNT) from A) order by AMOUNT desc limit 1;

ETTY
05-09-2013, 05:17 AM
мой не обломится. подумай хорошо.

Это ты подумай хорошо, потому как твой вариант возвращает только второе максимальное значение.
Если будет стоять задача найти 5-ое максимальное значение, то облом.

смешно
05-09-2013, 12:42 PM
Это ты подумай хорошо, потому как твой вариант возвращает только второе максимальное значение.
Если будет стоять задача найти 5-ое максимальное значение, то облом.


для 5 надо добавить 4-ре раза < select max(amount) from table A


a для универсальности вот это будет самое правильное, где 20 заменяешь на любое максимальное значение.

SELECT MIN(amount) FROM (SELECT DISTINCT amount FROM TABLE A WHERE rownum <= 20 ORDER BY amount DESC) ;

Джентльмен
05-09-2013, 05:47 PM
а что будет если в таблице всего одна row?

или другой экстрим - несколько rows с максимальным значением - скажем "напечатать двоих самых старших сотрудников"?

ETTY
05-09-2013, 10:03 PM
а что будет если в таблице всего одна row?

или другой экстрим - несколько rows с максимальным значением - скажем "напечатать двоих самых старших сотрудников"?

Если одна строка, то поиск второго по величине значение вернет 0 строк.

А насчет второго твоего вопроса, я не очень понял в чем экстрим?
SELECT TOP 2 * FROM A ORDER BY AGE desc

смешно
05-10-2013, 02:17 PM
а что будет если в таблице всего одна row?

или другой экстрим - несколько rows с максимальным значением - скажем "напечатать двоих самых старших сотрудников"?




SELECT * FROM TABLE A WHERE rownum <= 2 ORDER BY DOB;