powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Please help!!! Используются таблицы схемы STUDENT. Создать запрос для получения сведений
4 сообщений из 4, страница 1 из 1
Please help!!! Используются таблицы схемы STUDENT. Создать запрос для получения сведений
    #39922078
Sundragon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dear all,
I'm a student from Vietnam, I'm studying in Russia, now I'm doing the course work and get stuck on this question for 2 weeks.

Используются таблицы схемы STUDENT. Создать запрос для получения сведений (Фамилия, Группа, Специальность, Отличник/Хорошист) обо всех отличниках в группе, а если таковых нет, то обо всех хорошистах.

Под отличниками понимаем студентов, сдавших все предусмотренные учебные планом экзамены на «отлично» с первого раза.

Под хорошистами понимаем студентов, сдавших все предусмотренные учебные планом экзамены на «отлично» или «хорошо» с первого раза

I did several ways but they look like not corrected. Please help me!


Код: plsql
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.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
WITH db33 AS (
    SELECT
        tes1.stu_num1                  stu_num2,
        tes1.last_name1                last_name2,
        tes1.spec_title1               spec_title2,
        tes1.num_spec                  spec_num1,
        tes1.group_num1                group_num2,
        COUNT(tes1.list_courses)       number_sastified_courses
    FROM
        (
            SELECT
                student.stud_num         stu_num1,
                student.last_name        last_name1,
                speciality.spec_title    spec_title1,
                student.group_num        group_num1,
                study_group.spec_num     num_spec,
                curriculum.course_num    list_courses
            FROM
                     student
                INNER JOIN study_group ON student.group_num = study_group.group_num
                INNER JOIN speciality ON study_group.spec_num = speciality.spec_num
                INNER JOIN curriculum ON study_group.spec_num = curriculum.spec_num
            GROUP BY
                student.stud_num,
                student.group_num,
                student.last_name,
                speciality.spec_title,
                study_group.spec_num,
                curriculum.course_num
        ) tes1
    WHERE
        ( ( (
            SELECT
                MIN(grade)
            FROM
                grades
            WHERE
                ( grades.stud_num = tes1.stu_num1 )) IN (4,5) )
          AND ( tes1.list_courses IN (
            SELECT
                course_num
            FROM
                grades
            WHERE
                ( grades.stud_num = tes1.stu_num1 )
        ) ) )
    GROUP BY
        tes1.stu_num1,
        tes1.last_name1,
        tes1.spec_title1,
        tes1.num_spec,
        tes1.group_num1
)
SELECT
    db33.stu_num2,
    db33.last_name2,
    db33.spec_title2,
    db33.group_num2,
    MIN(grades.grade) min_grade
FROM
         db33
    INNER JOIN grades ON db33.stu_num2 = grades.stud_num
WHERE
    ( db33.number_sastified_courses = (
        SELECT
            COUNT(curriculum.course_num)
        FROM
            curriculum
        WHERE
            curriculum.spec_num = db33.spec_num1
    ) )
GROUP BY
    db33.stu_num2,
    db33.last_name2,
    db33.spec_title2,
    db33.group_num2
...
Рейтинг: 0 / 0
Please help!!! Используются таблицы схемы STUDENT. Создать запрос для получения сведений
    #39922086
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sundragon
обо всех отличниках в группе, а если таковых нет, то обо всех хорошистах.
А если ни тех, ни других, а только вьетнамцы?
...
Рейтинг: 0 / 0
Please help!!! Используются таблицы схемы STUDENT. Создать запрос для получения сведений
    #39923136
Sundragon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
I answer for myself

Код: plsql
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.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
WITH excellent AS (
    SELECT
        stud_num, --номер_студента stud_num
        'отличник' "SM"
    FROM
        (
            SELECT DISTINCT
                stud_num
            FROM
                grades --grades успеваемость
            MINUS
            SELECT
                stud_num --stud_num
            FROM
                (
                    SELECT
                        stud_num, 
                        course_num -- номер_дисциплины course_num
                    FROM
                             student
                        INNER JOIN study_group USING ( group_num ) --группы study_group
                        INNER JOIN curriculum USING ( spec_num ) --учебные_планы CURRICULUM spec_num SPEC_NUM
                    MINUS
                    SELECT
                        stud_num,
                        course_num
                    FROM
                        grades
                    WHERE
                        grade = 5
                )
            MINUS
            SELECT
                stud_num
            FROM
                grades t1
            WHERE
                course_num IN (
                    SELECT
                        course_num
                    FROM
                             student
                        INNER JOIN study_group USING ( group_num )
                        INNER JOIN curriculum USING ( spec_num )
                    WHERE
                        stud_num = t1.stud_num
                )
                AND grade < 5
        )
), good AS (
    SELECT
        stud_num,
        'хорошист' "SM"
    FROM
        (
            SELECT DISTINCT
                stud_num
            FROM
                grades
            MINUS
            SELECT
                stud_num
            FROM
                (
                    SELECT
                        stud_num,
                        course_num
                    FROM
                             student
                        INNER JOIN study_group USING ( group_num )
                        INNER JOIN curriculum USING ( spec_num )
                    MINUS
                    SELECT
                        stud_num,
                        course_num
                    FROM
                        grades
                    WHERE
                        grade >= 4
                )
            MINUS
            SELECT
                stud_num
            FROM
                grades t1
            WHERE
                course_num IN (
                    SELECT
                        course_num
                    FROM
                             student
                        INNER JOIN study_group USING ( group_num )
                        INNER JOIN curriculum USING ( spec_num )
                    WHERE
                        stud_num = t1.stud_num
                )
                AND grade < 4
            MINUS
            SELECT
                stud_num
            FROM
                excellent
        )
), groups_excellent AS (
    SELECT
        student.last_name           фамилия,
        student.group_num           группа,
        sp.spec_title               специальность,
        excellent.sm                      "Отличник/Хорошист"
    FROM
             excellent left
        JOIN student ON ( excellent.stud_num = student.stud_num )
        LEFT JOIN study_group         gr ON student.group_num = gr.group_num
        LEFT JOIN speciality  sp ON gr.spec_num = sp.spec_num
), groups_good AS (
    SELECT
        student.last_name             фамилия,
        student.group_num             группа,
        sp.spec_title                 специальность,
        good.sm                       "Отличник/Хорошист"
    FROM
             good left
        JOIN student ON ( good.stud_num = student.stud_num )
        LEFT JOIN study_group         gr ON student.group_num = gr.group_num
        LEFT JOIN speciality  sp ON gr.spec_num = sp.spec_num
)
SELECT
    фамилия,
    группа,
    специальность,
    "Отличник/Хорошист"
FROM
    groups_excellent
UNION ALL
SELECT
    *
FROM
    groups_good
WHERE
    группа NOT IN (
        SELECT DISTINCT
            группа
        FROM
            groups_excellent
    )
ORDER BY
    группа;
...
Рейтинг: 0 / 0
Please help!!! Используются таблицы схемы STUDENT. Создать запрос для получения сведений
    #39923169
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Sundragon,

скорее всего, поздно уже отвечать, но вдруг прочтешь:

не надо так сильно усложнять запрос, задача решается простыми группировками:
Код: plsql
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.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
with 
first_grades as ( -- получаем все оценки "с первого раза"
                    SELECT
                        st.stud_num, 
                        sg.group_num,
                        cu.course_num, -- номер_дисциплины course_num
                        min(nvl(gr.grade,2)) -- пусть будет -2-, если оценки нет, т.к. из условия непонятно
                            keep(dense_rank first order by gr.grade_date /* дата оценки */) first_grade
                    FROM
                             student st
                        INNER JOIN study_group sg
                            ON ( st.group_num = sg.group_num ) --группы study_group
                        INNER JOIN curriculum cu
                            ON ( sg.spec_num = cu.spec_num) --учебные_планы CURRICULUM spec_num SPEC_NUM
                        LEFT JOIN grades gr
                            ON gr.stud_num = st.stud_num
                            and gr.course_num = cu.course_num
                    GROUP BY 
                        st.stud_num, 
                        sg.group_num,
                        cu.course_num
    )
select
    stud_num, 
    group_num,
    course_num,
    case min(first_grade) -- минимальная оценка студента
        when 4 then 'хорошист'
        when 5 then 'отличник'
    end "Отличник/Хорошист"
from first_grades
group by 
    stud_num, 
    group_num,
    course_num
-- можно было бы решать через аналитику, но скорее всего у вас задачи на group by/having, поэтому
having -- отфильруем сгруппированное
    min(first_grade) in ( -- только отличники или хорошисты
        select max(gr.first_grade) --возьмем макс.оценку из 4 и 5
        from first_grades gr 
        where gr.first_grade in (4,5)
    )

...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Please help!!! Используются таблицы схемы STUDENT. Создать запрос для получения сведений
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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