I have created a query in PgAdmin, where one column named 'joining_date' in output returns a date.
When I use Group By I would like using only MM_YYY instead of DD_MM_YYY which is output datatype of 'joining_date' so that same employee_type can be grouped together.
create table employee(joining_date date,
employee_type varchar, name character varying);
insert into employee values
('16-11-2022', 'Intern', 'ABBS'),
('11-11-2022', 'senior', 'ABBS'),
('12-11-2022', 'senior', 'ABBS'),
('11-11-2022', 'senior', 'ABBS'),
('12-11-2022', 'Intern', 'ABBS');
select employee_type as emp,
to_char(joining_date, 'MM_YY') as batch,
count(employee_type) as num
from employee
GROUP BY employee_type, joining_date;
What I obtained is:
| emp | batch | num |
|---|---|---|
| Intern | 11_22 | 1 |
| senior | 11_22 | 1 |
| Intern | 11_22 | 1 |
| senior | 11_22 | 2 |
What I want to obtain is:
| emp | batch | num |
|---|---|---|
| Intern | 11_22 | 2 |
| senior | 11_22 | 3 |
How to proceed?
CodePudding user response:
Your query is almost correct.
But you need to use the same formatting in selection and GROUP BY, otherwise your grouping has not the intended effect.
So if your selection should be done as TO_CHAR(joining_date, 'MM_YY'), this must be used in the GROUP BY clause, too.
SELECT employee_type AS emp,
TO_CHAR(joining_date, 'MM_YY') AS batch,
COUNT(employee_type) AS num
FROM employee
GROUP BY employee_type,
TO_CHAR(joining_date, 'MM_YY');
You can replicate here that this will produce the expected result: db<>fiddle
