GROUP BY and HAVING

GROUP BY

  • GROUP BY clause divide the rows returned from SELECT statement into groups

  • For each group, you can apply aggregate functions like COUNT, SUM, MIN, MAX etc.

Syntax

SELECT column1,
       AGGREGATE_FUNCTION(column2)
FROM tablename
GROUP BY column1;

Group BY

Group the data in column and pass it to aggregate function

Group BY with count

SELECT 
    movie_lang,
    COUNT(movie_lang) as count
FROM
    movies
GROUP BY
    movie_lang
ORDER BY 
    count ASC;

 movie_lang | count 
------------+-------
 Swedish    |     1
 German     |     1
 Korean     |     1
 Spanish    |     1
 Portuguese |     2
 Japanese   |     4
 Chinese    |     5
 English    |    38

Group BY with SUM

Group BY with MIN, MAX

HAVING

  • We use HAVING clause to specify a search condition for a group or an aggregate

  • The HAVING clause is often used with the GROUP BY clause to filter rows based on filter condition

  • cannot use column alias with having clause because it is evaluated before the SELECT statement

  • HAVING AGGREGATE_FUNCTION(column2) = value

  • HAVING AGGREGATE_FUNCTION(column2) >= value

HAVING vs WHERE

  • HAVING works on result group

  • WHERE works on SELECT columns and not on the result group

Last updated

Was this helpful?