1번. 사원을 2가지 기준으로 정렬합니다.
첫번째 최고 급여를 받는 직원은 A 그렇지 않은 직원은 이름 으로 순방향 정렬
두번째 이름 역순 정렬
last_name 과 A 를 순방향 정렬하면 A 가 가장 먼저 나오게 되고
-> 최고급여를 받는 직원이 먼저 출력, 나머지 직원이 나중에 출력이 되고
최고 급여를 받는 직원 ORDER BY 'A' ASC, last_name DESC
-> 최고급여를 받는 직원은 이름 역순 정렬
나머지 직원 ORDER BY last_name ASC, last_name DESC
-> 같은 이름으로 정렬하니 두번째 정렬은 무의미함.
-> 나머지 직원은 이름 순 정렬
A) 최고 급여 직원이 이름 역순(내림차순,DESC) 정렬로 처음에 표시되고
B) 나머지 직원은 이름 순(오름차순, ASC) 정렬로 표시됨
2번. 크로스 셀프조인 후 조건절 처리.
조건은 무게가 더 큰 브릭과 연결
1행은 5보다 큰 2,3,4행과 연결 -> 3row
2행은 10보다 큰 3,4행과 연결 -> 2row
3행은 15보다 큰 4행과 연결 -> 1row
4행은 20보다 큰 거 없음 -> 0row
결과는 -> 3+2+1=6row
WITH employees AS ( SELECT 'AAA' last_name, 500 salary FROM dual UNION ALL SELECT 'BBB', 400 FROM dual UNION ALL SELECT 'CCC', 500 FROM dual UNION ALL SELECT 'DDD', 200 FROM dual UNION ALL SELECT 'EEE', 500 FROM dual UNION ALL SELECT 'FFF', 300 FROM dual ) SELECT CASE WHEN salary = (SELECT MAX(salary) FROM employees) THEN 'A' ELSE last_name END AS ord , last_name , salary FROM employees ORDER BY ord, last_name DESC ; ------------------------------------------------------------ | ORD | LAST_NAME | SALARY | 비고 | ------------------------------------------------------------ | A | EEE | 500 | 최고급여 A는 역순 EEE>CCC>AAA | | A | CCC | 500 | 최고급여 A는 역순 EEE>CCC>AAA | | A | AAA | 500 | 최고급여 A는 역순 EEE>CCC>AAA | | BBB | BBB | 400 | 나머지는 오름차순 BBB>DDD>FFF | | DDD | DDD | 200 | 나머지는 오름차순 BBB>DDD>FFF | | FFF | FFF | 300 | 나머지는 오름차순 BBB>DDD>FFF | ------------------------------------------------------------