Тож недавно перед собеседованием | |
---|---|
alex; Автор Сообщений: 2855 Откуда: Москва Дата регистрации: 23.11.2004 |
Тож недавно перед собеседованием попросили решить пользуясь любыми источниками
в инете эти задачи висят уже давно
МоиОтветы - где-то две ошибки
1. A! – (факториал) 2. sum1 = a + b ia=a ib=b for i = 1 to sum1 if ib=0 or A[ia] > B[ib] print A[ia] ia-=1 else print B[ib] ib-=1 next i 3. A=A-B B=max(B,A+B) A=min(A+B, B-A) 4. select t1.Date, sum(t2.Amount) as total_Amount from TBL t1 inner join TBL t2 on (t2.Date <= t1.Date) group by t1.Date order by t1.Date --select distinct t1.Date, sum(t2.Amount) over (partition by t1.Date) as total_Amount --from TBL t1 -- inner join TBL t2 on (t2.Date <= t1.Date) --order by t1.Date 5. B = -11A – 1 6. For i = 1 To n sum = sum + a Next i Print n * (n + 1) / 2 – sum 7. select TBL.StockID from NUM, TBL where NUM.ID <= TBL.Quantity 8. sf = 1 For i = 1 To n sf = sf * i^(n – i + 1) Next i Print sf 9. exec sp_MSdependencies @TableName, null, 0x140010 10. with cte as ( select [ID], [String], (len([String])-len(replace([String],@STR,'')))/len(@STR) as [Quantity] from TBL where charindex(@STR, [String]) > 0) select cte.[ID], [String], cast([Quantity] as float)/[Sum]*100 as [Percent] from cte inner join (select [ID], sum([Quantity]) as [Sum] from cte group by [ID]) t on t.[ID] = cte.[ID] ЗЫ Поправил 2,3,6,8 [i]Исправлено 2 раз(а). Последнее : alex;, 19.07.16 13:21 |
Re: Тож недавно перед собеседованием | |
---|---|
sphinx Сообщений: 31180 Откуда: Каменск-Уральски Дата регистрации: 22.11.2006 |
1) Где висят эти задачи? 2) Так взяли или нет? Или надо было все без ошибок решить? ------------------ "Veni, vidi, vici!"(с) |
Re: Тож недавно перед собеседованием | |
---|---|
alex; Автор Сообщений: 2855 Откуда: Москва Дата регистрации: 23.11.2004 |
в курилке местной видел и на sql.ru, но я сам хотел порешать нет, попросили поправить + на c# вот тока отправил |
Re: Тож недавно перед собеседованием | |
---|---|
Igor Korolyov Сообщений: 34580 Дата регистрации: 28.05.2002 |
В 4 задаче - если будет дубликат дня (в условии не оговорено что даты уникальны) то на этот день будет ошибка.
Кроме того такой запрос весьма неоптимален - по крайней мере для оракла Очень много CPU тратится на сортировки. Альтернативы:
Тоже не фонтан по производительности, хотя и быстрее раза в 2 и не даёт указанной ошибки. Ну и с аналитикой вот так будет:
В 10 задаче, ты считаешь не процент попаданий по ВСЕЙ таблице, а лишь процент в рамках каждого id - если id уникальны, то для любой записи получишь 100% В оракле есть весёлая аналитическая функция RATIO_TO_REPORT как раз позволяющая считать подобные проценты (как по всей таблице, так и по указанному partition-у, т.е. разделу, группе записей) с её использованием запрос можно написать вот так (пустой over - значит считаем процент ко ВСЕМ записям):
Без этой функции таки придётся делать почти как у тебя - и лучше с CTE, чтобы 2 раза не писать одинаковый подзапрос.
В принципе можно переписать такой запрос и без CTE/подзапросов - использовать как в 4 примере аналитическую функцию, но с заданием окна ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING (т.е. по сути сказать "считай для всей таблицы") - что даёт в итоге вычисление "за 1 проход". Правда писанина получается корявая - наш самодельный occurs придётся повторять 3 раза
По 9-му вопросу увы, не Копенгаген ------------------ WBR, Igor |
Re: Тож недавно перед собеседованием | |
---|---|
Igor Korolyov Сообщений: 34580 Дата регистрации: 28.05.2002 |
По C#
1) .ToString() не нужен для единственного аргумента Console.WriteLine(arg1) - там куча перегрузок под базовые типы, плюс он сам для object вызовет ToString(). Это если не подойдёт ни одна из "простых" перегрузок и будет выбран вариант Console.WriteLine(object arg1) 2) Console.WriteLine("A=" + A.ToString() + ", B=" + B.ToString()); Коряво, лучше Console.WriteLine("A={0}, B={1}", A, B); можно и нужный формат отображения задать тут же. 3) a -= 1; это a--; при том можно даже "совместить" эти декременты во 2 примере написав A[a--] и B[b--] в коде вывода, ну и соответственно в начале int sum1 = a-- + b--; 4) хардкодинг i < 5 в условии цикла 6-го примера (надо тот же A.Length пользовать) Ну и некоторые имена локальных переменных, скажем так, коротки и не мнемоничны sum1, a, b в коде 2 примера... P.S. Заодно посмотрел как называется функция из 8 примера - это "суперфакториал" ------------------ WBR, Igor Исправлено 1 раз(а). Последнее : Igor Korolyov, 19.07.16 15:17 |
Re: Тож недавно перед собеседованием | |
---|---|
alex; Автор Сообщений: 2855 Откуда: Москва Дата регистрации: 23.11.2004 |
Игорь, спасибо - все четко расписал
а если для 10 задачи так
Исправлено 1 раз(а). Последнее : alex;, 19.07.16 15:41 |
Re: Тож недавно перед собеседованием | |
---|---|
Igor Korolyov Сообщений: 34580 Дата регистрации: 28.05.2002 |
Ну так это практически то же самое что и я писал в предпоследнем примере-запросе - просто с выделением суммирующего подзапроса в CTE
------------------ WBR, Igor |
Re: Тож недавно перед собеседованием | |
---|---|
Гулин Федор Сообщений: 4640 Откуда: Минск Дата регистрации: 24.10.2002 |
мс-скл мой осн. тул щас
exec sp_MSdependencies 'Stg.INF_Transaction', null, 0x140010 stackoverflow.com однако недокум. фича похоже однако не знал - полез бы в инфо таблицы с метаданными - там есть начсет остальных задач - за компом с гоглм все порешал бы а вот на бумаге - не факт полезная гимнатсика для ума - правда на собесдовании где стресс бывает даже что знаешь не ответишь. |
© 2000-2024 Fox Club  |