Гость
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Задание на собеседовании [Помогите] / 11 сообщений из 11, страница 1 из 1
11.06.2021, 09:28
    #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
11.06.2021, 09:30
    #40077066
mixail08
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Задание на собеседовании [Помогите]
Неполный файл приложился
...
Рейтинг: 0 / 0
11.06.2021, 10:47
    #40077100
felix_ff
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Задание на собеседовании [Помогите]
mixail08,

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


А работать за вас мы тоже будем? Вы даже не удосужились подготовить тестовые данные. Не говоря уж о предварительных заготовках и путях решения.
...
Рейтинг: 0 / 0
11.06.2021, 12:14
    #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
11.06.2021, 14:38
    #40077220
aleks222
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Задание на собеседовании [Помогите]
court
нуу, 1-ое, ваще интересное :)

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

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

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

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

"Нужно разбить этих людей на группы, между которыми НЕвозможно общение." - это и есть связный подграф.
...
Рейтинг: 0 / 0
11.06.2021, 15:06
    #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
11.06.2021, 16:12
    #40077243
Oleg_SQL
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Задание на собеседовании [Помогите]
какие графы... не использовать таблицы и тп

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


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