I have a table of jobseekers with three columns
x
JOBSEEKER ID, EMPLOYER ID, HIRING STATUS
Each jobseeker could have different hiring status for each employer depending on the interview. Now I want to return the COUNT of each total HIRING STATUS But it should only count the jobseeker’s highest hiring status.
Say that John was ranked as QUALIFIED by employer 1 and HIRED by employer 2 John will only be counted under the highest hiring status he got which is HIRED by employer 2 and must not be counted under QUALIFIED.
HIRED: 1
QUALIFIED: 0
NEAR HIRED: 0
NOT QUALIFIED: 0
Here is my table
| Jobseeker Id | Employer Id | hstatus_id |
|--------------|-------------|------------------|
| 1 | 2 | 1(Hired) |
| 2 | 3 | 1(Hired) |
| 2 | 4 | 3(Near Hire) |
| 3 | 4 | 4(Not Qualified) |
| 1 | 2 | 2(Qualified) |
| 3 | 3 | 1(Hired) |
| 4 | 2 | 3(Near Hire) |
and the result I want is
| Hiring Status | COUNT |
|---------------|-------|
| Hired | 3 |
| Qualified | 0 |
| Near Hire | 1 |
| Not Qualified | 0 |
Thank you, sorry for bad English.
Advertisement
Answer
You need a LEFT join of the table hStatus_table
to a query that returns the minimum integer hiringstatus
of each jobseekerid
:
select s.hiringstatus, count(t.jobseekerid) counter
from hStatus_table s
left join (
select jobseekerid, min(hstatus_id) hstatus_id
from tablename
group by jobseekerid
) t on t.hstatus_id = s.id
group by s.id, s.hiringstatus
I assume that the table hStatus_table
is like this:
| ID | HiringStatus |
| --- | ------------- |
| 1 | Hired |
| 2 | Qualified |
| 3 | Near Hire |
| 4 | Not Qualified |
See the demo.
Results:
| hiringstatus | counter |
| ------------- | ------- |
| Hired | 3 |
| Qualified | 0 |
| Near Hire | 1 |
| Not Qualified | 0 |