Oracle
 sql >> база данни >  >> RDS >> Oracle

Oracle SQL примерна база данни

Не филтрирате заявката си, затова показвате всички служители.

Това ще филтрира служителите, които печелят по-малко от максимума за техния дълг/степен:

SELECT ename, salgrade.grade, dept.dname
  FROM emp, salgrade, dept
 WHERE emp.sal BETWEEN salgrade.losal AND salgrade.hisal
   AND emp.deptno = dept.deptno
   AND emp.sal = (SELECT MAX(sal)
                    FROM emp emp_in, salgrade grade_in
                   WHERE emp_in.sal BETWEEN grade_in.losal AND grande_in.hisal
                     AND emp_in.deptno = emp.deptno
                     AND grade_in.losal = salgrade.losal)

Все още ще намерите дубликати, защото например двама души в продажбите получават максималната заплата за степен 2 (и Мартин, и Уорд печелят 1250). Или това е приемливо, или имате нужда от други критерии, за да изберете само един от тях.

Можете да използвате row_number аналитична функция, за да се гарантира, че се връща само един ред по степен/отдел (имайте предвид, че Oracle ще избере произволно един ред, когато има дубликати):

SELECT * FROM (
  SELECT ename, salgrade.grade, dept.dname,
         row_number() OVER (PARTITION BY dept.deptno, salgrade.grade 
                            ORDER BY emp.sal DESC) rnk
    FROM emp, salgrade, dept
   WHERE emp.sal BETWEEN salgrade.losal AND salgrade.hisal
     AND emp.deptno = dept.deptno
) WHERE rnk = 1;

ENAME       GRADE DNAME          RNK
---------- ------ -------------- ---
MILLER          2 ACCOUNTING       1 
CLARK           4 ACCOUNTING       1 
KING            5 ACCOUNTING       1 
ADAMS           1 RESEARCH         1 
FORD            4 RESEARCH         1 
JAMES           1 SALES            1 
MARTIN          2 SALES            1 
ALLEN           3 SALES            1 
BLAKE           4 SALES            1 


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да преобразувате числов формат на изчислена колона във формат за време (hh:mm:ss), sql заявка

  2. Как да създам таблица с ограничения, докато изтеглям данни от друга таблица

  3. Рамка за синхронизиране:Oracle/SQLServer

  4. oracle свързване от множество родители

  5. Изчислете разликата между 2 дата/часа в Oracle SQL