SQL Standard

SQL Group By Month

Problem

Suppose we have a table containing employee information as shown below:

The goal is to order the data above based on the month of starting. This is described in the start_date column.

How can we approach such a problem?

Solution 1 – Group by Column (extract)

The first method we can use is the extract() function in SQL. It allows us to extract specific parts from a date object.

Hence, we can use the extract() function to extract the month the date and group the data from the resulting value.

An example query is as shown:

SELECT
    MAX(START_DATE)MAX(START_DATE)
FROM EMPLOYEES
GROUP BY EXTRACT(MONTH FROM START_DATE);

The above should group the data by the months and return the max date in each month group:

Solution 2 – Date format

You can also use the date_format function to group data by the month name. An example is as shown:

SELECT DATE_FORMAT('month', START_DATE) AS START_MONTH,
    COUNT (ID) AS ID
FROM EMPLOYEES
GROUP BY DATE_FORMAT('month', START_DATE);

This should group the data based on the month names and apply the count function.

Thanks for reading!!

About the author

John Otieno

My name is John and am a fellow geek like you. I am passionate about all things computers from Hardware, Operating systems to Programming. My dream is to share my knowledge with the world and help out fellow geeks. Follow my content by subscribing to LinuxHint mailing list