I just started learning SQL. I'm using an Oracle DB.
Table emp with column empno, ename, job, mgr, hiredate, sal, comm, deptno.
I want to get the first record from ename column for each deptno and ename have to be sort by asc.
The following SQL works:
Select ename
from (Select d.ename
From emp d
Where d.deptno = 10
Order by ename asc)
where rownum <= 1
Union
Select ename
from (Select d.ename
From emp d
Where d.deptno = 20
Order by ename asc)
where rownum <= 1
Union
Select ename
from (Select d.ename
From emp d
Where d.deptno = 30
Order by ename asc)
where rownum <= 1
Union
Select ename
from (Select d.ename
From emp d
Where d.deptno = 40
Order by ename asc)
where rownum <= 1
I want to optimise it so I dont need to rewrite it if I add some record to deptno column.
I tried with SELECT
distinct like
SELECT ename FROM emp WHERE (SELECT distinct deptno FROM emp)
The following recommendations will help you in your SQL tuning process.
You'll find 3 sections below:
SELECT
ename
FROM
(SELECT
d.ename
FROM
emp d
WHERE
d.deptno = 10
ORDER BY
d.ename ASC)
WHERE
rownum <= 1
UNION
SELECT
ename
FROM
(SELECT
d.ename
FROM
emp d
WHERE
d.deptno = 20
ORDER BY
ename ASC)
WHERE
rownum <= 1
UNION
SELECT
ename
FROM
(SELECT
d.ename
FROM
emp d
WHERE
d.deptno = 30
ORDER BY
ename ASC)
WHERE
rownum <= 1
UNION
SELECT
ename
FROM
(SELECT
d.ename
FROM
emp d
WHERE
d.deptno = 40
ORDER BY
ename ASC)
WHERE
rownum <= 1