Professional Documents
Culture Documents
Having Practice Merged
Having Practice Merged
Having Practice Merged
FROM Employee
GROUP BY Department;
Output
Department Salary
Engineering 48
HR 27
Marketing 16
Sales 20
Admin 15
Peon 4
Example – 1 (ii): Find the departments in which the SUM of the salaries is greater
than or equal to 20 lacs
Query
FROM Employee
GROUP BY Department
Engineering 48
HR 27
Sales 20
FROM Student
Engineering 25
FROM Employee
GROUP BY Department
Engineering 48
HR 27
Sales 20
Marketing 16
Admin 15
Difference between HAVING and WHERE clause
Parameter WHERE Clause HAVING Clause
Used to filter records before any groupings Used to filter values after they have been
Usage
are made. grouped.
Applied to SELECT, UPDATE, and DELETE Only applied with the GROUP BY clause in a
Applicability
statements. SELECT statement.
Grouping
Independent of GROUP BY clause. Directly dependent on the GROUP BY clause.
Dependency
ASSIGNMENT-03
1] WRITE A QUERY TO DISPLAY TOTAL SALARY NEEDED TO PAY EACH JOB IN EMPLOYEE TABLE.
SELECT SUM(SAL),JOB
FROM EMP
GROUP BY JOB;
2] WRITE A QUERY TO DISPLAY THE HIRE DATE ON WHICH AT LEAST 3 EMPLOYEES WHERE HIRED.
SELECT HIREDATE
FROM EMP
GROUP BY HIREDATE
HAVING COUNT(HIREDATE)>=3;
3] WRITE A QUERY TO DISPLAY THE DEPARTMENT NUMBER WHICH HAS MORE THAN 2 EMPLOYEES AND THE TOTAL AMOUNT REQUIRED TO
PAY THE MONTHLY SALARIES OF ALL THE EMPLOYEES IN THAT DEPARTMENT SHOULD BE MORE THAN 9000.
SELECT SUM(SAL), DEPTNO
FROM EMP
GROUP BY DEPTNO
HAVING COUNT(*)>2 AND SUM(SAL)>9000
TRACING
1] FROM CLAUSE IS EXECUTE IS GOES TO DB SEARCH FOR TN AN PUT IT INTO EXECUTION AREA
2] AFTER FROM CLAUSE GROUP BY CLAUSE IS EXECUTE BECAUSE THERE IS NO FILTER CONDITION
3] GROUP BY CLASUE EXECUTE R BY R IT GO TO FIRST ROW SEARCH FOR COLUMN NAME IF THERE IS NO GROUP OF THAT COL THEN IT WILL
CREATE NEW GROUP SO ON…
OUTPUT OF GROUP BY CLAUSE
FIRST GROUP DEPTNO 20
5 RECORD SELECTED SMITH, JONES SCOTT, ADAMS, FORD N THEIR SAL 800,2975,3000,1100,3000 IN DEPTNO 20(ALL COLUMN SELECTED FOR
UNDERSTANDING IAM WRITING ONLY 3 COLUMN)
SECOND GROUP DEPTNO 30
6 RECORD SELECTED ALLEN, WARD, MARTIN, BLACK, TURNER, JAMES N THEIR SAL 1600,1250,1250,2850,1500,950 IN DEPTNO 30(ALL COLUMN
SELECTED FOR UNDERSTANDING IAM WRITING ONLY 3 COLUMN)
THIRD GROUP DEPTNO 10
3 RECORD SELECTED CLARK, KING, MILLER N THEIR SAL 2450,5000,1300(ALL COLUMN SELECTED FOR UNDERSTANDING IAM WRITING ONLY 3
COLUMN)
4] AFTER GROUP BY CLAUSE ALL CLAUSE EXECUTE GROUP BY GROUP
5] AFTER EXECUTION OF GROUP BY CLAUSE HAVING CLAUSE IS EXECUTE G BY G (HAVING CLAUSE IS USED TO FILTER THE GROUP)
IT GO TO FIRST GROUP CHECK FOR THE CONDITION
IN ABOVE QUERY THE CONDITION IS COUNT VALUE OF EMPLOYEE IS MORE THAN 2 AND SUM OF SAL OF EACH DEPT SHOULD BE MORE THAN
9000.
IN FIRST GROUP 5 EMPLOYEE IS PRESENT WHICH MORE THAN 2 AND THEIR SUM (SAL) IS ALSO MORE THAN 9000 … IN AND IF BOTH CONDITION
IS TRUE THEN IT BECOME TRUE.HENCE THIS GROUP IS SELECTED (800+2975+3000+1100+3000=10875)
AFTER EXECUTION IT GOES TO SECOND GROUP AND CHECK FOR THE CONDITION
IN SECOND GROUP 6 EMPLOYEE IS PRESENT WHICH MORE THAN 2 AND THEIR SUM (SAL) IS ALSO MORE THAN 9000 … IN AND IF BOTH
CONDITION IS TRUE THEN IT BECOME TRUE.HENCE THIS GROUP IS SELECTED (1600+1250+1250+2850+1500+950=9400)
AFTER EXECUTION IT GOES TO THIRD GROUP AND CHECK FOR THE CONDITION
IN THIRD GROUP 3 EMPLOYEE IS PRESENT WHICH MORE THAN 2 AND THEIR SUM (SAL) IS NOT MORE THAN 9000 … IN AND IF ONE CONDITION
IS FALSE THEN IT BECOME FALSE..HENCE THIS GROUP IS NOT SELECTED (2450+5000+1300=8750)
AFTER THIRD GROUP THERE IS NO GROUP IS PRESENT HENCE IT COMPLETE THE EXCECUTION OF HAVING CLAUSE
AFTER EXECUTION OF HAVING CLASUE SLECT CLAUSE WILL BE EXCEUTE G BY G
IN SELECT CLAUSE ONE MRF IS PRESENT SUM(SAL) , DEPTNO(GROUP FUNCTION) {IT EXECUTE G BY G HENCE WE WRITE THE COL NAME WITH
MRF)
SUM(SAL) DEPTNO
--------- ----------
9400 30
10875 20
4] WRITE A QUERY TO DISPLAY NUMBER OF EMPLOYEES WORKING IN EACH DEPARTMENT AND ITS’ AVERAGE SALARY BY EXCLUDING ALL
THE EMPLOYEES WHOSE SALARY IS LESS THAN THEIR COMMISSION.
SELECT COUNT(*),AVG(SAL),DEPTNO
FROM EMP
WHERE SAL>COMM
GROUP BY SAL,DEPTNO,COMM;
5] WRITE A QUERY TO DISPLAY THE SALARIES WHICH HAS REPETITIONS IN THE SAL COLUMN OF EMPLOYEE TABLE
SELECT SA
FROM EMP
GROUP BY SAL
HAVING COUNT(*)>1
6] WRITE A QUERY TO DISPLAY THE EMPLOYEE NAME ONLY IF MORE THAN ONE PERSON IN THE EMPLOYEES OF THE COMPANY HAS SAME
NAME
SELECT ENAME
FROM EMP
GROUP BY ENAME
HAVING COUNT(*)>1;
7] WRITE A QUERY TO DISPLAY THE DEPARTMENT NUMBER WHOSE AVERAGE SALARY IS BETWEEN 2500 AND 3000.
SELECT AVG(SAL), DEPTNO
FROM EMP
GROUP BY DEPTNO
HAVING AVG(SAL) BETWEEN 2500 AND 3000;
DEPTNO 20 AVG SAL IS 2175 IT IS NOT IN RANGE OF 2500 AND 3000 HENCE THIS GROUP IS REJECTED
DEPTNO 30 AVG SAL IS 1566.66 IT IS NOT IN RANGE OF 2500 AND 3000 HENCE THIS GROUP IS REJECTED
DEPTNO 10 AVG SAL IS 2916.66 IT IS IN RANGE OF 2500 AND 3000 HENCE THIS GROUP IS SELECTED
8] WRITE A QUERY TO DISPLAY THE NUMBER OF EMPLOYEES ONLY IF THEY ARE WORKING AS MANAGER OR ANALYST AND THEIR ANNUAL
SAL SHOULD END WITH A ZERO, IN EACH DEPARTMENT.
SELECT COUNT(*), DEPTNO
FROM EMP
WHERE JOB IN (‘MANAGER’,’ANALYST’) AND SAL*12 LIKE ‘%0’
GROUP BY DEPTNO;
10] WRITE A QUERY TO DISPLAY HIGHEST SALARY GIVEN TO A MANAGER IN EACH DEPARTMENT.
SELECT MAX(SAL),DEPTNO
FROM EMP
WHERE JOB =’MANAGER’
GROUP BY DEPTNO;
11] WRITE A QUERY TO DISPLAY NO OF TIMES THE SALARIES HAVE REPEATED IN THE EMP TABLE.
SELECT COUNT(SAL), SAL
FRPM EMP
GROUP BY SAL
HAVING COUNT(SAL)>1;
12] WRITE A QUERY TO DISPLAY DEPTNO AND NUNBER OF EMPLOYEES WHORKING IN EACH DEPARTMENT EXCEPT FOR THOSE WORKING IN
DEPT 10.
SELECT COUNT(*), DEPTNO
FROM EMP
WHERE DEPTNO!=10
GROUP BY DEPTNO;
15] WAQTD AVERAGE SALARY NEEDED TO PAY ALL THE EMPLOYEES WHO ARE HAVING A REPORTING MANAGER IN EACH JOB.
SELECT AVG(SAL), JOB
FROM EMP
WHERE MGR IS NOT NULL
GROUP BY JOB;
TRACING
1] FIRST FROM CLAUSE EXECUTE IT GOES TO DB SEARCH FOR THAT TABLE AND PUT IT INTO UNDER EXECUTION AREA.
2] AFTER THE FROM CLAUSE WHERE CLAUSE EXECUTE WHERE CLAUSE EXECUTE R BY R AND IT IS FILTER THE RECORDS FROM TABLE
THE FILTER CONDITION IS MGR IS NOT NULL…… NOT NULL MEANS THE SHOULD HAVE SOMETHING WHERE CELL IS EMPTY THEN THAT RECORD
IS REJECTED.. AFTER THE WHERE CLAUSE GROUP BY CLAUSE IS EXECUTE
3] GROUP BY CLAUSE IS USE TO CREATE GROUP IT EXECUTE R BY R
IT GOES FIRST RECORD SEARCH FOR COLUMN NAME IF THERE IS ANY GROUP IS PRESENT OF THAT COLUMN THEN IT PUT THAT RECORD ON
THAT GROUP IT SO ON UNTIL ALL RECORDS ARE COVERED.
4] AFTER GROUP BY CLAUSE SELECT CLAUSE EXCECUTE G BY G BECAUSE AFTER THE EXECUTION OF GROUP BY CLAUSE ALL CLAUSE EXECUTE
G BY G AND SELECT CLAUSE IS USED FOR DISPLAYING THE RECORDS…
IN QUERY SENARIO
FIRST WE REJECTED THE ALL RECORAD WHERE MGR CELL IS NULL (O/P 13 ROW SELECTED FROM TABLE)
THEN GROUP BY CLAUSE IS EXECUTE R BY R AND CREATE A 4 GROUPS AS SHOWN GIVEN BELOW:
FIRST GROUP CLEARK JOB THEN SALESMAN JOB THEN MANAGER JOB AND LAST ONE IS ANALYST JOB
THEN AFTER EXECUTION OF GROUP BY CLAUSE SELECT CLAUSE EXECUTE G BY G
THEN AVG(SAL) OF CLAERK IS (800+1100+950+1300/4=1037.5)
THEN AVG(SAL) OF SALESMAN IS(1600+1250+1250+1500/4=1400)
THEN AVG(SAL) OF MANAGER IS(2975+2850+2450/3=2758.33)
THEN AVG(SAL) OF ANALYST IS(3000+3000/2=3000)
AVG(SAL) JOB
---------- ---------
1037.5 CLERK
1400 SALESMAN
2758.33333 MANAGER
3000 ANALYST
16] WAQTD NUMBER OF EMPLOYEES HIRED INTO THE SAME DEPARTMENT ON THE SAME DAY.
SELECT COUNT(*),HIREDATE,DEPTNO
FROM EMP
GROUP BY HIREDATE, DEPTNO;
17] WAQTD NUMBER OF EMPLOYEES GETTING THE SAME SALARY , WORKING IN THE SAME DEPARTMENT.
SELECT COUNT(*),SAL,DEPTNO
FROM EMP
GROUP BY SAL,DEPTNO
HAVING COUNT(*)>1;
18] WAQTD MAXIMUM SALARY GIVEN IN EACH DESIGNATION EXCLUDING THOSE WHOS NAME STARTS WITH ‘K’.
SELECT MAX(SAL),JOB
FROM EMP
WHERE ENAME NOT LIKE ‘K%’
GROUP BY JOB;
20] WAQTD NUMBER OF EMPLOYEE NAMES STARTING WITH AN VOWEL IN EACH DEPARTMENT.
SELECT COUNT(*),DEPTNO
FROM EMP
WHERE ENAME LIKE 'A%' OR ENAME LIKE 'E%' OR ENAME LIKE 'I%' OR ENAME LIKE 'O%' OR ENAME LIKE '
GROUP BY DEPTNO;
(IN TABLE ONLY TWO NAME STATING WITH VOWELS IN DEPTNO 30 AND 20 ….ALLEN IN DEPTNO 30 AND ADAM IN DEPTNO 20…)