powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Задание на собеседовании [Помогите]
11 сообщений из 11, страница 1 из 1
Задание на собеседовании [Помогите]
    #40077065
mixail08
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Задание 1
Есть несколько человек.
Каждый из них может говорить на одном или нескольких языках.
Человек Знание языков
Anna French, German
Bill Chinese, Italian, Spanish
Ivan Chinese
Max English, French
Olga German, Japanese
Piter English, Russian
Sam Italian, Portuguese

Нужно разбить этих людей на группы, между которыми НЕвозможно общение.
С учетом того, что можно общаться с несколькими переводчиками.
Например, Piter может пообщаться с Olga так: Piter – English - Max – French - Anna – German - Olga
Результат представить в таком виде:
Группа Участники Языки
1 Anna, Max, Olga, Piter English, French, German, Japanese, Russian
2 Bill, Ivan, Sam Chinese, Italian, Portuguese, Spanish

Выполнить с помощью sql запроса (без использования процедур временных таблиц и переменных). CTE использовать разрешается.

Задание 2
В компании есть несколько отделов, в каждом из них работают несколько менеджеров.
Есть информация о зарплате (окладе) каждого менеджера, и количестве договоров, заключенных менеджером за месяц.
Отдел Менеджер Оклад Количество заключенных договоров за месяц
Department 1 Manager 1 500 7
Department 1 Manager 2 500 9
Department 1 Manager 3 700 2
Department 1 Manager 4 700 8
Department 1 Manager 5 500 7
Department 1 Manager 6 600 4
Department 2 Manager 13 600 9
Department 2 Manager 14 700 3
Department 2 Manager 15 700 6
Department 2 Manager 16 500 2
Department 2 Manager 26 700 2
Department 3 Manager 16 500 3
Department 3 Manager 17 600 1
Department 3 Manager 18 600 7
Department 3 Manager 19 600 7
Department 3 Manager 20 600 9


Необходимо рассчитать премии менеджерам по следующему алгоритму:
- если в среднем по отделу заключено 5 или более договоров на одного менеджера, то в отделе всем, начисляется премия 20% от оклада.
- Кроме того, премия 10% начисляется сотруднику заключившему наибольшее количество договоров в компании. Если таких несколько, то всем по 10 %.
Результат вывести в следующем виде (см. примечания к таблице).
Отдел Менеджер Количество договоров Сумма бонуса
86 1450

Department 1 Manager 02 9 150
Department 2 Manager 13 9 60

Department 3 Manager 20 9 180
Department 1 37 750

Department 1 Manager 01 7 100

Department 1 Manager 02 9 150
Department 1 Manager 03 2 140
Department 1 Manager 04 8 140
Department 1 Manager 05 7 100
Department 1 Manager 06 4 120
Department 2 22 60

Department 2 Manager 13 9 60
Department 2 Manager 14 3 0
Department 2 Manager 15 6 0
Department 2 Manager 16 2 0
Department 2 Manager 26 2 0
Department 3 27 640
Department 3 Manager 16 3 100
Department 3 Manager 17 1 120
Department 3 Manager 18 7 120
Department 3 Manager 19 7 120
Department 3 Manager 20 9 180

Порядок строк важен.
Результат сформировать sql запросом используя grouping sets без использования union.
...
Рейтинг: 0 / 0
Задание на собеседовании [Помогите]
    #40077066
mixail08
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Неполный файл приложился
...
Рейтинг: 0 / 0
Задание на собеседовании [Помогите]
    #40077100
felix_ff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mixail08,

а где ваши идеи/нароботки выполнения задания?
...
Рейтинг: 0 / 0
Задание на собеседовании [Помогите]
    #40077103
mixail08
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
felix_ff, понимаю, что задание 1нужно через рекурсию cte делать. но не понимаю как...
...
Рейтинг: 0 / 0
Задание на собеседовании [Помогите]
    #40077119
Кесарь
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mixail08
felix_ff, понимаю, что задание 1нужно через рекурсию cte делать. но не понимаю как...


А работать за вас мы тоже будем? Вы даже не удосужились подготовить тестовые данные. Не говоря уж о предварительных заготовках и путях решения.
...
Рейтинг: 0 / 0
Задание на собеседовании [Помогите]
    #40077141
Фотография court
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
нуу, 1-ое, ваще интересное :)
Код: 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.
-- в результате, ещё, нужно "дубли" из перестановок убрать, но вот это уже не интересно :)
declare @t table (name varchar(50), langs varchar(1000))

insert into @t values 
('Anna', 'French,German'),
('Bill', 'Chinese,Italian,Spanish'),
('Ivan', 'Chinese'),
('Max', 'English,French'),
('Olga', 'German,Japanese'),
('Piter', 'English,Russian'),
('Sam', 'Italian,Portuguese')

;with cte as (
	select t.name, t.langs, trim(a.value) as lang  from @t t
	cross apply string_split(t.langs,',') a),
cte1 as (
	select 
		cast(name as varchar(max)) as name
		,cast(langs as varchar(max)) as langs
		,1 as lvl
	from @t t

	union all

	select
		a.name+','+t.name
		,a.langs+','+t.langs
		,a.lvl+1
	from cte1 a inner join @t t on ','+a.name+',' not like '%,'+t.name+',%'
	where not exists (select 1 from cte b where b.name=t.name and ','+a.langs+',' like '%,'+b.lang+',%')
)
select * from cte1 where lvl > 1 order by lvl, name 

...
Рейтинг: 0 / 0
Задание на собеседовании [Помогите]
    #40077220
aleks222
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
court
нуу, 1-ое, ваще интересное :)

Поиск связного подграфа.
Классика, набившая оскомину.
...
Рейтинг: 0 / 0
Задание на собеседовании [Помогите]
    #40077221
Фотография court
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aleks222
court
нуу, 1-ое, ваще интересное :)

Поиск связного подграфа.
Классика, набившая оскомину.
втом и дело, что наоборот, - несвязанные "ищуцца" )
...
Рейтинг: 0 / 0
Задание на собеседовании [Помогите]
    #40077223
aleks222
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
court
aleks222
пропущено...

Поиск связного подграфа.
Классика, набившая оскомину.
втом и дело, что наоборот, - несвязанные "ищуцца" )

Искать можно и пятый угол.
Но если слегка подучиться - можно его не искать.

"Нужно разбить этих людей на группы, между которыми НЕвозможно общение." - это и есть связный подграф.
...
Рейтинг: 0 / 0
Задание на собеседовании [Помогите]
    #40077227
Фотография court
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aleks222
"Нужно разбить этих людей на группы, между которыми НЕвозможно общение." - это и есть связный подграф.
т.е. связями между вершинами ("человеками") ты предлагаешь считать НЕвозможность их общения ?

ОК )
авторЧеловек Знание языков
Anna French, German
Bill Chinese, Italian, Spanish
Ivan Chinese
Max English, French
Olga German, Japanese
Piter English, Russian
Sam Italian, Portuguese
Anna - "вдребезги" не понимает Bill-а. Связали
Bill - в туда же, не понимает Olga. Связали

получился связанный граф из 3-х вершин, который по твоей логике должен быть в решении.
Только вот Anna и Olga вполне могут, между собой, "шпрехать" по German
Соответственно решение - фуфло
...
Рейтинг: 0 / 0
Задание на собеседовании [Помогите]
    #40077243
Oleg_SQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
какие графы... не использовать таблицы и тп

только СТЕ
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Задание на собеседовании [Помогите]
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]