Find Managers and employees reporting to them
SELECT LEVEL, empno, ename, mgr
FROM emp CONNECT BY PRIOR empno = mgr START WITH mgr IS NULL;
Number of occurrence of 'a' in the string
Select length(translate('saravana.','abcdefghijklmnopqrstuvwxyz., ','a')) from dual;
Find even records
SELECT k FROM (SELECT empno k, MOD (ROWNUM, 2) t FROM emp) WHERE t = 0
2nd max salary
Select max(sal) from emp where sal not in (select max(sal) from emp);
Maximum salary in each dept
SELECT e.ename, e.deptno, e.sal
FROM emp e
WHERE e.sal = (SELECT MAX (e2.sal)
FROM emp e2
WHERE e2.deptno = e.deptno);
n-th row selection
SELECT * FROM t1 a
WHERE n = (SELECT COUNT(rowid)
FROM t1 b
WHERE a.rowid >= b.rowid);
or
SELECT rownum,empno FROM scott.emp a GROUP BY rownum,empno HAVING rownum = <rownumber>;
Fetch records between 2 ranges
SELECT ROWNUM, empno
FROM emp
GROUP BY ROWNUM, empno
HAVING ROWNUM BETWEEN 2 AND 4;
Nth highest salary
SELECT * FROM emp a
WHERE &n = (SELECT COUNT (DISTINCT sal) FROM emp WHERE a.sal <= sal);
eg:
SELECT LEVEL, MAX (sal)
FROM emp
WHERE LEVEL = 3
CONNECT BY PRIOR sal > sal
GROUP BY LEVEL
Nth Minimum salary
SELECT LEVEL, MIN (sal)
FROM emp
WHERE LEVEL = 1--->1st level
CONNECT BY PRIOR sal >sal
GROUP BY LEVEL
TOP 5 employees
SELECT *
FROM (SELECT ROWNUM, e.*
FROM emp e
ORDER BY sal DESC)
WHERE ROWNUM < 6
SELECT LEVEL, empno, ename, mgr
FROM emp CONNECT BY PRIOR empno = mgr START WITH mgr IS NULL;
Number of occurrence of 'a' in the string
Select length(translate('saravana.','abcdefghijklmnopqrstuvwxyz., ','a')) from dual;
Find even records
SELECT k FROM (SELECT empno k, MOD (ROWNUM, 2) t FROM emp) WHERE t = 0
2nd max salary
Select max(sal) from emp where sal not in (select max(sal) from emp);
Maximum salary in each dept
SELECT e.ename, e.deptno, e.sal
FROM emp e
WHERE e.sal = (SELECT MAX (e2.sal)
FROM emp e2
WHERE e2.deptno = e.deptno);
n-th row selection
SELECT * FROM t1 a
WHERE n = (SELECT COUNT(rowid)
FROM t1 b
WHERE a.rowid >= b.rowid);
or
SELECT rownum,empno FROM scott.emp a GROUP BY rownum,empno HAVING rownum = <rownumber>;
Fetch records between 2 ranges
SELECT ROWNUM, empno
FROM emp
GROUP BY ROWNUM, empno
HAVING ROWNUM BETWEEN 2 AND 4;
Nth highest salary
SELECT * FROM emp a
WHERE &n = (SELECT COUNT (DISTINCT sal) FROM emp WHERE a.sal <= sal);
eg:
SELECT LEVEL, MAX (sal)
FROM emp
WHERE LEVEL = 3
CONNECT BY PRIOR sal > sal
GROUP BY LEVEL
Nth Minimum salary
SELECT LEVEL, MIN (sal)
FROM emp
WHERE LEVEL = 1--->1st level
CONNECT BY PRIOR sal >sal
GROUP BY LEVEL
TOP 5 employees
SELECT *
FROM (SELECT ROWNUM, e.*
FROM emp e
ORDER BY sal DESC)
WHERE ROWNUM < 6