Having Practice Merged

You might also like

Download as pdf or txt
Download as pdf or txt
You are on page 1of 8

Here is the dataset (Employee) that contains the record Employee ID, Name,

Department, Education, and their salary in Lacs.


Employee ID Name Gender Department Education Month of Joining Salary

1001 Ajay M Engineering Doctoral January 25

1002 Babloo M Engineering UG February 23

1003 Chhavi F HR PG March 15

1004 Dheeraj M HR UG January 12

1005 Evina F Marketing UG March 16

1006 Fredy M Sales UG December 10

1007 Garima F Sales PG March 10

1008 Hans M Admin PG November 8

1009 Ivanka F Admin Intermediate April 7

1010 Jai M Peon High School December 4

Must Read: What is the difference between SQL and MySQL?


Must Read: Difference between SQL and NoSQL
Example – 1 (i): Calculate the sum of salaries of each department.
Query

SELECT Department, SUM(Salary)

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

SELECT Department, SUM(Salary)

FROM Employee

GROUP BY Department

HAVING SUM(Salary) >= 20;


Output
Department Salary

Engineering 48

HR 27

Sales 20

HAVING with WHERE


Example – 2: Find the department in which SUM salary is greater than or equal to
20 lacs, but the education of employees is not UG.
Query

SELECT Department, SUM(Salary)

FROM Student

WHERE Education <> ‘UG’


GROUP BY Department

HAVING SUM(Salary) >= 20;


Firstly, the above query will filter the record using the WHERE clause to select the
record of the employees who are not undergraduates. Then it will calculate the
SUM(Salary) of each department. finally, using the HAVING clause, the query will filter
out those departments that are SUM(Salary) >= 20.
Output
Department Salary

Engineering 25

HAVING with ORDER BY


Example – 3: Find the departments in which the SUM of the salaries is greater
than or equal to 15 lacs and arrange the Salary in descending order.
Query

SELECT Department, SUM(Salary)

FROM Employee

GROUP BY Department

HAVING SUM(Salary) >= 15

ORDER BY SUM(Salary) DESC;


Output
Department Salary

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.

Operates on grouped records created by the


Operational Stage Operates on individual rows.
GROUP BY clause.

Aggregate Cannot use aggregate functions (like SUM,


It can use aggregate functions.
Functions AVG, COUNT, etc.).

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;

9] WRITE A QUERY TO DISPLAY NO OF CLERKS WORKING IN EACH DEPARTMENT.


SELECT COUNT(*),DEPTNO
FROM EMP
WHERE JOB=’CLERK’
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;

13] WAQTD NUMBER OF EMPLOYEES GETTING COMISSION IN EACH DEPARTMENT.


SELECT DEPTNO
FROM EMP
WHERE COMM IS NOT NULL
GROUP BY DEPTNO;
14] WAQTD NUMBER OF EMPLOYEES GETTING SALARY MORE THAN 1600 EXCLUDING ALL THE MANAGERS IN EACH DEPARTEMNT.
SELECT COUNT(DEPTNO),DEPTNO
FROM EMP
WHERE SAL>1600 AND JOB!='MANAGER'
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;

19] WAQTD NUMBER OF EMPLOYEES REPORTING TO 7839.


SELECT COUNT(*),MGR
FROM EMP
WHERE MGR=7839
GROUP BY MGR;

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…)

You might also like