2015-07-01 40 views
0

在此示例中,如何使用SQL返回按薪水帶劃分的員工數?按範圍或組計數的自定義SQL查詢

Table : EmployeeSalary 
Employee Salary 
1  21,000 
2  24,000 
3  30,000 
4  31,000 
5  32,000 
6  50,000 

Table: SalaryBands 
ID Name MinSalary MaxSalary 
1 Tier1 20,000 24,999 
2 Tier2 25,000 44,999 
3 Tier3 45,000 150,000 

回答

0

試試這個:

select s.name, count(*) as count 
from employeesalary e 
inner join salarybands s on e.salary >= s.minsalary and e.salary <=s.maxsalary 
group by s.name 

的核心思想是在此基礎上的工資範圍內的每個員工的薪水落在連接表的計數,然後以通常的方式來實現。

Demo

0

一個nonequi加入是爲您的需求完美契合。這是一個不使用等價操作符來匹配行的連接。

SELECT 
    sb.name, 
    count(*) 
FROM 
    EmployeeSalary es 
    INNER JOIN SalaryBands sb ON 
    es.salary BETWEEN sb.minsalary AND sb.maxsalary 
GROUP BY sb.name 
0

另一種不需要連接的方法。

select 
sum(case when REPLACE(salary, ',', '') between 20000 and 24999) then 1 else 0 end as count_tier1, 
sum(case when REPLACE(salary, ',', '') between 25000 and 44999) then 1 else 0 end as count_tier2, 
sum(case when REPLACE(salary, ',', '') between 45000 and 150000) then 1 else 0 end as count_tier3 
from 
Employee_salary 
;