Отображать только максимальный результат из SQL-запроса в Oracle - PullRequest
0 голосов
/ 15 мая 2018

У меня есть запрос:

SELECT 
STUDENT.S_ID AS "ID", 
STUDENT.S_LAST ||' '|| STUDENT.S_FIRST AS "Student Name",
COUNT(COURSE.COURSE_NO) AS "Number of courses", 
SUM(COURSE.CREDITS) AS "Total Credits"
FROM 
STUDENT
JOIN ENROLLMENT 
ON ENROLLMENT.S_ID = STUDENT.S_ID
JOIN COURSE_SECTION
ON COURSE_SECTION.C_SEC_ID = ENROLLMENT.C_SEC_ID
JOIN COURSE
ON COURSE.COURSE_NO = COURSE_SECTION.COURSE_NO
GROUP BY STUDENT.S_ID, STUDENT.S_lAST, STUDENT.S_FIRST;

Он отображает результат:

ID     Student Name                    Number of courses Total Credits
------ ------------------------------- ----------------- -------------
JO100  Jones Tammy                                     6            21
MA100  Marsh John                                      5            15
SM100  Smith Mike                                      2             6
PE100  Perez Jorge                                     6            18
JO101  Johnson Lisa                                    5            15
NG100  Nguyen Ni                                       4            12

Мне нужны только студенты с наибольшим количеством кредитов.Для этого это будет студент с ID JO100.Как добиться этого в запросе?

Ответы [ 2 ]

0 голосов
/ 15 мая 2018

Попробуйте это -

SELECT
    *
FROM
    (
        SELECT
            A.*,
            DENSE_RANK() OVER(
                ORDER BY "TOTAL CREDITS" DESC
            ) AS RNK
        FROM
            (
                SELECT
                    STUDENT.S_ID AS "ID",
                    STUDENT.S_LAST
                     || ' '
                     || STUDENT.S_FIRST AS "STUDENT NAME",
                    COUNT(COURSE.COURSE_NO) AS "NUMBER OF COURSES",
                    SUM(COURSE.CREDITS) AS "TOTAL CREDITS"
                FROM
                    STUDENT
                    JOIN ENROLLMENT ON ENROLLMENT.S_ID   = STUDENT.S_ID
                    JOIN COURSE_SECTION ON COURSE_SECTION.C_SEC_ID   = ENROLLMENT.C_SEC_ID
                    JOIN COURSE ON COURSE.COURSE_NO   = COURSE_SECTION.COURSE_NO
                GROUP BY
                    STUDENT.S_ID,
                    STUDENT.S_LAST,
                    STUDENT.S_FIRST
            ) A
    )
WHERE
    RNK   = 1;
0 голосов
/ 15 мая 2018
;With CTE as
(
SELECT 
STUDENT.S_ID AS "ID", 
STUDENT.S_LAST ||' '|| STUDENT.S_FIRST AS "Student Name",
COUNT(COURSE.COURSE_NO) AS "Number of courses", 
SUM(COURSE.CREDITS) AS "Total Credits"
FROM 
STUDENT
JOIN ENROLLMENT 
ON ENROLLMENT.S_ID = STUDENT.S_ID
JOIN COURSE_SECTION
ON COURSE_SECTION.C_SEC_ID = ENROLLMENT.C_SEC_ID
JOIN COURSE
ON COURSE.COURSE_NO = COURSE_SECTION.COURSE_NO
GROUP BY STUDENT.S_ID, STUDENT.S_lAST, STUDENT.S_FIRST
)
Select Id, "Student Name", "Number of Courses", "Total Credits"
From CTE
Where "Total Credits" = (Select Max("Total Credits") From Cte);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...