Разобрали ответы и решения урока 3.4(База данных «Абитуриент», запросы корректировки) под курс «Интерактивный тренажер по SQL».
Предыдущий разбор модуля 3.3 следующий разбор модуль 3.5
Создать вспомогательную таблицу
applicant, куда включитьidобразовательной программы,idабитуриента, сумму баллов абитуриентов (столбецitog) в отсортированном сначала поidобразовательной программы, а потом по убыванию суммы баллов виде (использовать запрос из предыдущего урока).
CREATE TABLE applicant
SELECT program_id, enrollee.enrollee_id, SUM(result) AS itog
FROM enrollee
JOIN program_enrollee USING(enrollee_id)
JOIN program USING(program_id)
JOIN program_subject USING(program_id)
JOIN subject USING(subject_id)
JOIN enrollee_subject USING(subject_id)
WHERE enrollee_subject.enrollee_id = enrollee.enrollee_id
GROUP BY program_id, enrollee_id
ORDER BY program_id, itog DESC; Из таблицы
applicant, созданной на предыдущем шаге, удалить записи, если абитуриент на выбранную образовательную программу не набрал минимального балла хотя бы по одному предмету (использовать запрос из предыдущего урока).
DELETE FROM applicant
USING
applicant
JOIN (
SELECT program_enrollee.program_id, program_enrollee.enrollee_id
FROM program
JOIN program_subject USING(program_id)
JOIN program_enrollee USING(program_id)
JOIN enrollee_subject ON
enrollee_subject.enrollee_id = program_enrollee.enrollee_id AND
enrollee_subject.subject_id = program_subject.subject_id
WHERE result < min_result
) AS t
ON applicant.program_id = t.program_id AND
applicant.enrollee_id = t.enrollee_id Повысить итоговые баллы абитуриентов в таблице
applicantна значения дополнительных баллов (использовать запрос из предыдущего урока).
UPDATE applicant JOIN (
SELECT enrollee_id, IFNULL(SUM(bonus), 0) AS Бонус FROM enrollee_achievement
LEFT JOIN achievement USING(achievement_id)
GROUP BY enrollee_id
) AS t USING(enrollee_id)
SET itog = itog + Бонус; Поскольку при добавлении дополнительных баллов, абитуриенты по каждой образовательной программе могут следовать не в порядке убывания суммарных баллов, необходимо создать новую таблицу
applicant_orderна основе таблицыapplicant. При создании таблицы данные нужно отсортировать сначала поidобразовательной программы, потом по убыванию итогового балла. А таблицуapplicant, которая была создана как вспомогательная, необходимо удалить.
CREATE TABLE applicant_order
SELECT * FROM applicant
ORDER BY 1, 3 DESC;
DROP TABLE applicant Включить в таблицу
applicant_orderновый столбецstr_idцелого типа , расположить его перед первым.
ALTER TABLE applicant_order ADD
str_id int FIRST Занести в столбец
str_idтаблицыapplicant_orderнумерацию абитуриентов, которая начинается с 1 для каждой образовательной программы.
SET @row_num := 1;
SET @num_pr := 0;
UPDATE applicant_order
SET str_id = IF(program_id = @num_pr, @row_num := @row_num + 1, @row_num := 1 AND @num_pr := @num_pr + 1); Создать таблицу
student, в которую включить абитуриентов, которые могут быть рекомендованы к зачислению в соответствии с планом набора. Информацию отсортировать сначала в алфавитном порядке по названию программ, а потом по убыванию итогового балла.
CREATE TABLE student
SELECT name_program, name_enrollee, itog FROM enrollee
JOIN applicant_order USING (enrollee_id)
JOIN program USING (program_id)
WHERE str_id<=plan
ORDER BY name_program, itog DESC Придумайте один или несколько запросов корректировки данных для предметной области «Абитуриент» (в таблицы занесены данные, как на предыдущем шаге, таблица
studentсоздана). Проверьте, правильно ли они работают.
SELECT *
FROM applicant_order Если у вас не отображается решение последних задач, значит у вас включен блокировщик рекламы который вырезает эти ответы
Создать таблицу
student, в которую включить абитуриентов, которые могут быть рекомендованы к зачислению в соответствии с планом набора. Информацию отсортировать сначала в алфавитном порядке по названию программ, а потом по убыванию итогового балла.CREATE TABLE student
SELECT name_program, name_enrollee, itog
FROM program
JOIN applicant_order USING (program_id)
JOIN enrollee USING (enrollee_id)
WHERE str_id<=plan
ORDER BY 1, 3 DESC;