×
☰ See All Chapters

MySQL HAVING Clause

 

The MySQL HAVING clause is used to select groups by giving conditions using aggregate function with operators.  If you want to use HAVING clause, GROUP BY is mandatory because HAVING clause will use aggregate function and tells GROUP BY which groups to include in the output. But when you are using GROUP BY, HAVING is optional. HAVING is to GROUP BY as WHERE is to SELECT. In other words, the WHERE clause places conditions on the selected columns, and the HAVING clause places conditions on groups created by the GROUP BY clause. Therefore, when you use the HAVING clause, you are effectively including or excluding, as the case might be, whole groups of data from the query results.

MySQL HAVING Clause syntax

SELECT COLUMN1, COLUMN2

FROM TABLE

WHERE <Condition>

GROUP BY COLUMN1, COLUMN2

HAVING <ConditionUsingAggreagteFunction>

MySQL HAVING Clause example

Creating table for demonstrating GROUP BY clause

CREATE TABLE EMP

(EMPNO NUMERIC(4) ,

ENAME VARCHAR(10),

JOB VARCHAR(9),

MGR NUMERIC(4),

HIREDATE DATE,

SAL NUMERIC(7,2),

CONSTRAINT PK_EMP PRIMARY KEY(EMPNO)

);

 

INSERT INTO EMP VALUES (7369,'SMITH','CLERK',7902,'1980-12-17',800);

INSERT INTO EMP VALUES (7499,'ALLEN','SALESMAN',7698,'1981-2-20',1600);

INSERT INTO EMP VALUES (7521,'WARD','SALESMAN',7698,'1981-2-22',1250);

INSERT INTO EMP VALUES (7566,'JONES','MANAGER',7839,'1981-4-2',2975);

INSERT INTO EMP VALUES (7654,'MARTIN','SALESMAN',7698,'1981-9-28',1250);

INSERT INTO EMP VALUES (7698,'BLAKE','MANAGER',7839,'1981-5-1',2850);

INSERT INTO EMP VALUES (7782,'CLARK','MANAGER',7839,'1981-6-9',2450);

INSERT INTO EMP VALUES (7788,'SCOTT','ANALYST',7566,'1987-4-19',3000);

INSERT INTO EMP VALUES (7839,'KING','PRESIDENT',NULL,'1981-11-17',5000);

INSERT INTO EMP VALUES (7844,'TURNER','SALESMAN',7698,'1981-9-8',1500);

INSERT INTO EMP VALUES (7876,'ADAMS','CLERK',7788,'1987-5-23',1100);

INSERT INTO EMP VALUES (7900,'JAMES','CLERK',7698,'1981-12-3',950);

INSERT INTO EMP VALUES (7902,'FORD','ANALYST',7566,'1981-12-3',3000);

INSERT INTO EMP VALUES (7934,'MILLER','CLERK',7782,'1982-1-23',1300);

 

COMMIT;

Example 1

SELECT SUM(SAL),JOB

FROM EMP

GROUP BY JOB

HAVING SUM(SAL)>5000

mysql-having-clause-0
 

Example 2

SELECT SUM(SAL),JOB

FROM EMP

WHERE JOB<>'ANALYST'

GROUP BY JOB

HAVING SUM(SAL)>5000

mysql-having-clause-1


All Chapters
Author