23/02/14 [Database]

μ›°μΉ˜μŠ€Β·2023λ…„ 2μ›” 14일
0

πŸ“Œ Top-N 뢄석

1. Top_N λΆ„μ„μ΄λž€?

: μ»¬λŸΌμ—μ„œ κ°€μž₯ 큰 n개의 κ°’ λ˜λŠ” κ°€μž₯ μž‘μ€ n개의 값을 μ°ΎλŠ” 것.
(예λ₯Ό λ“€μ–΄ β€˜κ°€μž₯ 적게 νŒ”λ¦° μ œν’ˆ 10κ°€μ§€λŠ”?’, λ˜λŠ” β€˜νšŒμ‚¬μ˜ μ΅œμƒμœ„ μ†Œλ“μž 3λͺ…은?’ λ“±...)

2. Top-N 뢄석 질의의 ꡬ쑰

3. Top-N 뢄석 예제

: EMP ν…Œμ΄λΈ”μ—μ„œ μ΅œμƒμœ„ μ†Œλ“μž 3λͺ…μ˜ 이름과 κΈ‰μ—¬λ₯Ό ν‘œμ‹œν•˜μ‹œμ˜€.

SQL> select ROWNUM as RANK, last_name, salary
 	 from (select last_name, salary 
     	   from employees 
           order by salary DESC) 
     where ROWNUM <= 3;

: EMP ν…Œμ΄λΈ”μ—μ„œ μ΅œν•˜μœ„ μ†Œλ“μž 3λͺ…μ˜ 이름과 κΈ‰μ—¬λ₯Ό ν‘œμ‹œν•˜μ‹œμ˜€.

SQL> select ROWNUM as RANK, last_name, salary
     from (select last_name, salary 
           from employees 
           order by salary)
     where ROWNUM <= 3

  • 더 쒋은 μ„±λŠ₯의 문법 = 1번 문법
1.
SQL> select ROWNUM as RANK, last_name, salary
     from (select last_name, salary 
           from employees 
           order by salary)
     where ROWNUM <= 3

(==)
2.
SQL> select ROWNUM as RANK, last_name, salary
     from (select * 
           from employees 
           order by salary)
     where ROWNUM <= 3
// (11개의 μ»¬λŸΌμ„ μž„μ‹œμ €μž₯ν–ˆλ‹€κ°€ 3개λ₯Ό λ‹€μ‹œ κ±ΈλŸ¬λƒ„)

✏️ Quiz – Top N 뢄석

  • EMPν…Œμ΄λΈ”μ—μ„œ κ°€μž₯ μ΅œκ·Όμ— μž…μ‚¬ν•œ 사원 10λͺ…μ˜ rownum(μˆœμœ„), employee_id, last_name, hire_dateλ₯Ό 좜λ ₯ν•˜μ‹œμ˜€.
select ROWNUM as RANK, employee_id, last_name, hire_date
from (select  employee_id, last_name, hire_date
      from employees
      order by hire_date desc)
where ROWNUM <= 10;

  • EMPν…Œμ΄λΈ”μ—μ„œ κ°€μž₯ μ˜ˆμ „μ— μž…μ‚¬ν•œ 사원 10λͺ…μ˜ rownum(μˆœμœ„), employee_id, last_name, hire_dateλ₯Ό 좜λ ₯ν•˜μ‹œμ˜€.
select ROWNUM as RANK, employee_id, last_name, hire_date
from (select  employee_id, last_name, hire_date
      from employees
      order by hire_date)
where ROWNUM <= 10;

  • EMPLOYEES ν…Œμ΄λΈ”κ³Ό DEPARTMENTS ν…Œμ΄λΈ”μ„ μ‚¬μš©ν•˜μ—¬ μ΅œμƒμœ„ μ†Œλ“μž 순으둜 10μœ„μ—μ„œ 20μœ„μ— ν•΄λ‹Ήν•˜λŠ” μ‚¬μ›λ“€μ˜ 정보λ₯Ό 좜λ ₯ν•˜μ‹œμ˜€.

πŸ“ Tip !!
β‘΄ emp->1~20μœ„
β‘΅ 10~20μœ„
β‘Ά dept 쑰인

β‘΄ emp->1~20μœ„

select ROWNUM as RANK, employee_id, last_name, salary, department_id
from(select employee_id, last_name, salary,department_id
     from employees
     order by salary desc)
where ROWNUM <= 20;

β‘΅ 10~20μœ„

select RANK, employee_id, last_name, salary, department_id
from (select ROWNUM as RANK, employee_id, last_name, salary, department_id
      from(select  employee_id, last_name, salary,department_id
            from employees
            order by salary desc)
      where ROWNUM <= 20)
where RANK between 10 and 20;    

β‘Ά dept 쑰인

select a.RANK, a.employee_id, a.last_name, a.salary, a.department_id, b.department_name
from (select ROWNUM as RANK, employee_id, last_name, salary, department_id
      from(select  employee_id, last_name, salary,department_id
           from employees
           order by salary desc)
      where ROWNUM <= 20) a join departments b
on (a.department_id = b.department_id)
where a.RANK between 10 and 20
order by a.rank ;

0개의 λŒ“κΈ€