employee department wise and count of employees more than 5

后端 未结 3 1011
我在风中等你
我在风中等你 2021-01-29 05:14

i want to display department_id\'s along with count,and count should be more than 5, and i want to have employees who are not hired in January.

i tried the

相关标签:
3条回答
  • 2021-01-29 05:48
    SELECT department_ID, count(employee_id) as '# of Employees' FROM EMPLOYEES 
    WHERE DEPARTMENT_ID IN
     (
       SELECT DEPARTMENT_ID
        FROM EMPLOYEES
       GROUP BY DEPARTMENT_ID
       HAVING COUNT(*)>5 
     )
    AND HIRE_DATE NOT LIKE '%JAN%'
    group by department_ID;
    

    This query returns the department_id and because I group by department_id, the count of employees that belong to each department will be returned

    Output will look something like this

      Department_Id | # of Employees
            1             7
            2             6
            4             9
    
    0 讨论(0)
  • 2021-01-29 05:48

    Select the count from your inner query and join to it:

    SELECT E.*, DEPT_COUNT
    FROM EMPLOYEES E
    JOIN (
       SELECT DEPARTMENT_ID, COUNT(*) DEPT_COUNT
       FROM EMPLOYEES
       GROUP BY DEPARTMENT_ID
       HAVING COUNT(*) > 5 
    ) DC ON E.DEPARTMENT_ID = DC.DEPARTMENT_ID
    AND HIRE_DATE NOT LIKE '%JAN%'
    
    0 讨论(0)
  • 2021-01-29 05:57

    If you want the dept id and count of employees (where employee hire date is not in Jan) then something like the following should work. I say "something like the following" because I suspect the WHERE hire_date NOT LIKE '%JAN%' could be improved, but it would just depend on the format of that column.

       SELECT
          DEPARTMENT_ID, 
          COUNT(*) 
        FROM EMPLOYEES 
        WHERE HIRE_DATE NOT LIKE '%JAN%' 
        GROUP BY DEPARTMENT_ID 
        HAVING COUNT(*)>5;
    

    If you also want to list the individual employees along with these departments, then something like this might work:

    SELECT a.*, b.count(*) 
    FROM EMPLOYEES AS a 
    INNER JOIN (   
    SELECT
          DEPARTMENT_ID, 
          COUNT(*) 
        FROM EMPLOYEES 
        WHERE HIRE_DATE NOT LIKE '%JAN%' 
        GROUP BY DEPARTMENT_ID 
        HAVING COUNT(*)>5) AS b
    ON a.department_id = b.department_id
    WHERE a.HIRE_DATE NOT LIKE '%JAN%';
    

    Again, though, I think you can leverage your schema to improve the where clause on HIRE_DATE. A like/not-like clause is generally going to be pretty slow.

    0 讨论(0)
提交回复
热议问题