Анализ и статистика данных по «Школе 21». В данном проекте была создана база данных в Postgres со знаниями о «Школе 21», написаны процедуры и функции на plpgsql для получения различной информации, а также триггеры для её изменения.
Скрипт part1.sql служит для создания базы данных и всех таблиц, описанных выше.
Для удобства в скрипт внесены процедуры, позволяющие импортировать и экспортировать данные для каждой таблицы из файла/в файл с расширением .csv.
В качестве параметра каждой процедуры указывается разделитель csv файла.
Данные можно загрузить из csv-файлов в папке datasets.
Скрипт part2.sql содержит слкдующие функции и процедуры.
Параметры: ник проверяемого, ник проверяющего, название задания, статус P2P-проверки, время. \
Параметры: ник проверяемого, название задания, статус проверки Verter'ом, время. \
3) Триггер: после добавления записи со статусом «начало» в таблицу P2P изменяется соответствующая запись в таблице TransferredPoints
Запись считается корректной, если:
- Количество XP не превышает максимальное доступное для проверяемой задачи.
- Поле Check ссылается на успешную проверку.
Скрипт part3.sql содержит слкдующие процедуры и функции:
Ник пира 1, ник пира 2, количество переданных пир-поинтов.
Количество отрицательное, если пир 2 получил от пира 1 больше поинтов.
Пир - это ученик «Школы 21».
2) Функция, возвращающая таблицу вида: ник пользователя, название проверенного задания, кол-во полученного XP
В таблицу включи только задания, успешно прошедшие проверку (определять по таблице Checks).
Одна задача может быть успешно выполнена несколько раз. В таком случае в таблицу включи все успешные проверки.
Параметры функции: день, например, 12.05.2022.
Функция возвращает только список пиров.
Формат вывода: ник пира, изменение в количество пир-поинтов.
5) Расчет изменения в количестве пир-поинтов каждого пира по таблице, возвращаемой первой функцией из Part 3
Формат вывода: ник пира, изменение в количество пир-поинтов.
Формат вывода: день, название задания.
7) Определение всех пиров, выполнивших весь заданный блок задач и дату завершения последнего задания
Параметры процедуры: название блока, например, «CPP».
Формат вывода: ник пира, дата завершения блока (т. е. последнего выполненного задания из этого блока).
Определять нужно было, исходя из рекомендаций друзей пира, т. е. нужно найти пира, проверяться у которого рекомендует наибольшее число друзей.
Формат вывода: ник пира, ник найденного проверяющего.
- Приступили только к блоку 1;
- Приступили только к блоку 2;
- Приступили к обоим;
- Не приступили ни к одному.
Параметры процедуры: название блока 1, например, SQL, название блока 2, например, A.
Формат вывода: процент приступивших только к первому блоку, процент приступивших только ко второму блоку, процент приступивших к обоим, процент не приступивших ни к одному.
Также определение процента пиров, которые хоть раз проваливали проверку в свой день рождения.
Формат вывода: процент пиров, успешно прошедших проверку в день рождения, процент пиров, проваливших проверку в день рождения.
Параметры процедуры: названия заданий 1, 2 и 3.
Формат вывода: список пиров.
То есть сколько задач нужно выполнить, исходя из условий входа, чтобы получить доступ к текущей.
Формат вывода: название задачи, количество предшествующих.
13) Поиск «удачныех» для проверок днией. День считается «удачным», если в нем есть хотя бы N идущих подряд успешных проверки
Параметры процедуры: количество идущих подряд успешных проверок N.
Под идущими подряд успешными проверками подразумеваются успешные проверки, между которыми нет неуспешных.
При этом кол-во опыта за каждую из этих проверок должно быть не меньше 80% от максимального.
Формат вывода: список дней.
Формат вывода: ник пира, количество XP.
Параметры процедуры: время, количество раз N.
Формат вывода: список пиров.
Параметры процедуры: количество дней N, количество раз M.
Формат вывода: список пиров.
Расчет для каждого месяца, сколько раз люди, родившиеся в этом месяце, приходили в кампус за всё время (общее число входов).
Расчет для каждого месяца, сколько раз люди, родившиеся в этом месяце, приходили в кампус раньше 12:00 за всё время (число ранних входов).
Расчет процента ранних входов в кампус относительно общего числа входов для каждого месяца.
Формат вывода: месяц, процент ранних входов.
В этой части создается отдельная БД, скрипт со всеми процедурами, описанными ниже, находится в файле part4.sql.