(SELECT '國文' cid, 60 ca, TRUNC (SYSDATE) cb
FROM DUAL
UNION
SELECT '國文' cid, 100 ca, TRUNC (SYSDATE) + 1 cb
FROM DUAL
UNION
SELECT '國文' cid, 60 ca, TRUNC (SYSDATE) + 3 cb
FROM DUAL
UNION
SELECT '國文' cid, 100 ca, TRUNC (SYSDATE) + 3 cb
FROM DUAL
UNION
SELECT '數學' cid, 40 ca, TRUNC (SYSDATE) + 3 cb
FROM DUAL
UNION
SELECT '數學' cid, 70 ca, TRUNC (SYSDATE) + 2 cb
FROM DUAL
UNION
SELECT '數學' cid, 90 ca, TRUNC (SYSDATE) + 3 cb
FROM DUAL
UNION
SELECT '數學' cid, NULL ca, TRUNC (SYSDATE) + 3 cb
FROM DUAL),
qb AS
(SELECT DENSE_RANK () OVER (PARTITION BY cid ORDER BY ca DESC NULLS LAST) AS dense_rank_top,
RANK () OVER (PARTITION BY cid ORDER BY ca DESC NULLS LAST) AS rank_top,
MAX(CA) KEEP (DENSE_RANK LAST ORDER BY CA NULLS LAST) OVER (PARTITION BY CID) "Highest" ,
MIN(ca) KEEP (DENSE_RANK FIRST ORDER BY ca NULLS LAST) OVER (PARTITION BY cid) "Lowest",qa.*
FROM qa)
SELECT *
FROM qb