Для каждого учителя выведите его первый урок со статусом success. Какова доля среди них регулярных (regular) уроков? Ответ округлите до целого процента (например, ответ 79,1% записать как 79)
SELECT
t.id,
t.name,
MIN(l.created_at) AS first_lesson,
ROUND(100 * SUM(CASE WHEN l.status = 'success' AND l.type = 'regular' THEN 1 ELSE 0 END) / COUNT(*)) AS regular_lesson_percent
FROM
Teachers t
JOIN Lessons l ON t.id = l.teacher_id
GROUP BY
t.id,
t.name
HAVING
COUNT(CASE WHEN l.status = 'success' THEN 1 ELSE NULL END) > 0
ORDER BY
first_lesson;
Объяснение запроса:
1. Мы выбираем поля "ID" и "name" из таблицы "Учителя".
2. Мы используем агрегатную функцию MIN для выбора даты первого урока.
3. Мы используем функцию ROUND для округления доли.
4. Мы используем функцию SUM с CASE-выражением для расчета количества регулярных уроков со статусом "success".
5. Мы используем функцию COUNT для расчета общего количества уроков.
6. Мы группируем результаты по ID учителей и имени.
7. Мы используем функцию HAVING для исключения учителей, у которых нет уроков со статусом "success".
8. Мы сортируем результаты по дате первого урока.
Таким образом, запрос вернет таблицу со следующими полями:
- id - идентификатор учителя
- name - имя учителя
- first_lesson - дата первого урока со статусом "success"
- regular_lesson_percent - доля (в процентах) регулярных уроков со статусом "success"
Примеры:
Пусть у нас есть следующие данные:
Таблица "Учителя" (Teachers):
| id | name |
|----|----------|
| 1 | John |
| 2 | Jane |
| 3 | Michael |
Таблица "Уроки" (Lessons):
| id | teacher_id | status | type | created_at |
|----|------------|---------|----------|------------|
| 1 | 1 | success | regular | 2021-01-01 |
| 2 | 1 | success | trial | 2021-01-03 |
| 3 | 1 | failed | regular | 2021-01-05 |
| 4 | 2 | success | regular | 2021-01-02 |
| 5 | 2 | failed | trial | 2021-01-04 |
| 6 | 3 | success | regular | 2021-01-06 |
Тогда результат выполнения запроса будет выглядеть следующим образом:
| id | name | first_lesson | regular_lesson_percent |
|----|----------|--------------|------------------------|
| 1 | John | 2021-01-01 | 50 |
| 2 | Jane | 2021-01-02 | 100 |
| 3 | Michael | 2021-01-06 | 0 |
Объяснение результатов:
1. У учителя John есть первый урок со статусом "success", но только 1 из 2 уроков является регулярным, таким образом доля регулярных уроков равна 50%.
2. У учителя Jane есть первый регулярный урок со статусом "success", и 100% ее успешных уроков являются регулярными.
3. У учителя Michael только 1 урок со статусом "success", но он не является регулярным, таким образом доля регулярных уроков равна 0%.
Таким образом, доля регулярных уроков среди первых уроков со статусом "success" равна (50 + 100 + 0) / 3 = 50%, округленно до целого процента. Ответ: 50%.Нажимая «Регистрация» или «Войти через Google», вы соглашаетесь с Публичной офертой, даете Согласие на обработку персональных данных, а также подтверждаете что вам есть 18 лет
Нажимая «Регистрация» или «Войти через Google», вы соглашаетесь с Публичной офертой, даете Согласие на обработку персональных данных, а также подтверждаете что вам есть 18 лет